我正在尝试将 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 使用证书的正确权限的正确方法是什么?
更改文件夹的权限
/etc/letsencrypt/live/
修复了权限问题。
sudo chmod 755 /etc/letsencrypt/live/
但我很担心,因为 这个答案来自 让我们加密论坛:
您应该将 live 目录的权限更改回原来的权限 他们是,例如使用 sudo chmod 700 /etc/letsencrypt/live/.
您的私钥很敏感,不应该公开 可以访问。
(如果实时目录是您唯一更改的内容,则它们不是 尚未暴露,但仍然。)