运行 kestrel web 服务器的 docker 容器中的证书权限被拒绝

问题描述 投票:0回答:1

我正在尝试将 LetsEncrypt 证书与 Docker 容器一起使用。该容器正在运行公开 http 和 https 的 Asp.Net Core 应用程序。

为了在服务器上运行容器,我执行了这些步骤。 首先,我使用 docker 和 certbot 生成 LetsEncrypt 证书,如下所示:

mkdir -p /home/username/domain.de/letsencrypt
cd /home/username/domain.de/letsencrypt
docker run --rm -it \
-v $PWD/log/:/var/log/letsencrypt/ \
-v $PWD/etc/:/etc/letsencrypt/ \
-p 80:80 \
certbot/certbot certonly --standalone -d domain.de -d www.domain.de

对于 Kestrel Web 服务器,我还在

appsettings.json
中配置了 docker 容器内证书的路径:

"Kestrel": {
  "Certificates": {
    "Default": {
      "Path": "etc/letsencrypt/live/domain.de/fullchain.pem",
      "KeyPath": "etc/letsencrypt/live/domain.de/privkey.pem"
    }
  }
}

然后启动应用程序并传递带有 LetsEncrypt 证书的卷。

docker run -p 80:80 \
-p 443:443 \
-e ASPNETCORE_HTTP_PORTS=80 \
-e ASPNETCORE_HTTPS_PORTS=443 \
-v /home/username/domain.de/letsencrypt/etc:/etc/letsencrypt \
dockerhubaccount/domain.de

这会导致权限被拒绝异常:

fail: Microsoft.Extensions.Hosting.Internal.Host[11]
      Hosting failed to start
      System.UnauthorizedAccessException: Access to the path '/etc/letsencrypt/live/domain.de/fullchain.pem' is denied.
       ---> System.IO.IOException: Permission denied

我也尝试过是否把路径放错了,但是当更改它时,错误更改为找不到路径。所以路径是正确的,docker 或 .Net 运行时看起来缺少权限。

设置 docker 使用证书的正确权限的正确方法是什么?

docker asp.net-core permissions lets-encrypt kestrel-http-server
1个回答
0
投票

更改文件夹的权限

/etc/letsencrypt/live/
修复了权限问题。

sudo chmod 755 /etc/letsencrypt/live/ 

但我很担心,因为 这个答案来自 让我们加密论坛:

您应该将 live 目录的权限更改回原来的权限 他们是,例如使用 sudo chmod 700 /etc/letsencrypt/live/.

您的私钥很敏感,不应该公开 可以访问。

(如果实时目录是您唯一更改的内容,则它们不是 尚未暴露,但仍然。)

© www.soinside.com 2019 - 2024. All rights reserved.