如何禁用特定加密套件同时保留Certbot对Let's Encrypt证书的自动续期
解决Certbot自动续期与禁用3DES加密套件的冲突问题
嘿,我来帮你搞定这个困扰——要在符合PCI DSS标准(禁用3DES)的同时保留Certbot的自动续期功能,核心是避免让Certbot覆盖你的自定义SSL配置,这里有几个实操性很强的方案:
1. 用include指令分离自定义SSL配置(最稳妥)
这是业内最常用的方法,把你的SSL安全配置单独拎出来,Certbot碰不到,自然不会被覆盖。
步骤如下:
- 新建一个自定义SSL配置文件,比如
/etc/nginx/snippets/custom-ssl.conf,把你需要的安全配置写进去,确保完全排除3DES:
# 仅启用安全的TLS版本(符合PCI DSS要求) ssl_protocols TLSv1.2 TLSv1.3; # 不含3DES的加密套件列表,可根据需求调整 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off;
- 打开Certbot生成的域名配置文件(比如你的站点专属conf文件),找到原本的
ssl_protocols、ssl_ciphers这些行,把它们注释掉或者删除,然后添加一行:
include /etc/nginx/snippets/custom-ssl.conf;
- 测试nginx配置是否合法:
nginx -t,如果提示test is successful,就重启nginx生效:systemctl restart nginx
这样Certbot续期时只会更新证书路径(ssl_certificate和ssl_certificate_key),根本不会碰你通过include引入的自定义配置,完美规避冲突。
2. 让Certbot直接生成符合要求的SSL配置(进阶)
如果你不想用include,也可以在生成证书时就告诉Certbot你要的加密套件,后续续期时它会默认沿用这些设置。
首次生成证书时,运行类似这样的命令:
certbot --nginx --ssl-protocols TLSv1.2 TLSv1.3 --ssl-ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
这里的--ssl-protocols和--ssl-ciphers直接指定了符合PCI DSS的配置,Certbot生成的nginx配置里就会自带这些设置,后续续期时只要你不手动修改这些自动生成的行,就不会被覆盖。
⚠️ 注意:如果你之后重新运行Certbot时没带这些参数,或者Certbot插件更新,有可能会覆盖配置,所以第一种include的方法稳定性更高。
3. 验证配置是否生效
修改完后,一定要确认3DES真的被禁用了:
- 用openssl命令测试:
openssl s_client -connect yourdomain.com:443 -cipher '3DES',如果返回SSL handshake failure,说明3DES已经被成功禁用。 - 也可以用SSL检测工具扫描你的域名,确认PCI DSS合规,且没有3DES相关的加密套件。
避坑提醒
- 别直接修改Certbot自动生成的
ssl_ciphers行:这就是你收到警告的原因——Certbot在续期时会检测这些行,如果发现是手动修改的,大概率会覆盖成默认值,你的禁用3DES设置就白做了。 - 确保你的配置完全符合PCI DSS:除了禁用3DES,还要记得只启用TLS 1.2及以上版本,不要保留过时的TLSv1.0/TLSv1.1。
内容的提问来源于stack exchange,提问作者1xor1
相关产品推荐
相关产品推荐

