You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Let's Encrypt签发的SSL证书访问权限及使用方案咨询

你当前手动复制证书的方案暂时可用,但长期来看不合理,核心问题和优化方案如下:

现有方案存在的问题

  • Let's Encrypt 证书默认90天有效期,certbot 会自动完成续期,但你手动复制到 /home/ec2-user/ssl 的证书不会跟随官方续期自动更新,每次续期后都要手动重新同步,一旦遗漏就会导致证书过期、HTTPS 服务中断,运维成本和故障率都很高。
  • 你的复制操作本身没有违反README的DON'T MOVE要求:该提示是禁止移动/etc/letsencrypt下的原文件,否则会破坏certbot的证书管理、续期逻辑,你是复制而非移动,所以原证书的自动续期功能不受影响。
  • 你当前复制后的文件权限是合格的:私钥privkey.pem权限为rw-------仅root可读,没有泄露风险。

直接挂载原路径报错的真实原因

你之前判断是权限问题,但其实核心原因是你只挂载了live目录,而live下的证书都是软链接,真实的证书文件存放在/etc/letsencrypt/archive/www.example.com/目录下,你只挂载live目录到容器里,软链接指向的真实文件不存在,才会报No such file or directory的错误,权限问题是次要因素。

推荐的优化方案

方案一(最省事,推荐):直接挂载完整的letsencrypt目录

修改docker-compose.yml的volumes配置,把整个/etc/letsencrypt目录挂载到容器内,不用复制文件,自动跟随certbot续期:

volumes:
  ...
  - /etc/letsencrypt:/etc/letsencrypt
  ...

对应的Nginx配置调整证书路径即可:

ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

官方Nginx镜像默认用root用户启动master进程,完全有权限读取宿主机root权限的证书文件,不需要额外修改权限。

方案二:保留单独挂载ssl目录的习惯,配置自动同步

如果你不想把整个letsencrypt目录挂载进容器,可以给certbot配置续期钩子,每次证书续期成功后自动把新证书复制到/home/ec2-user/ssl目录、重启Nginx容器,完全不需要人工干预:
你只需要在/etc/letsencrypt/renewal-hooks/deploy/目录下新建一个脚本,内容如下:

#!/bin/bash
cp /etc/letsencrypt/live/www.example.com/*.pem /home/ec2-user/ssl/
chmod 600 /home/ec2-user/ssl/privkey.pem
docker-compose -f /path/to/your/docker-compose.yml restart nginx

给脚本加可执行权限即可,后续certbot自动续期后会自动执行这个脚本同步证书。

内容的提问来源于stack exchange,提问作者user65415642

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:15:07