搭载nginx proxy docker的LAMP栈证书链缺失,求配置指导
jwilder/nginx-proxy 搭配LAMP栈SSL证书链缺失修复方案
问题根因
jwilder/nginx-proxy默认要求SSL证书文件同时包含域名证书、中间证书的完整信任链,仅单独上传域名证书会导致根证书之外的信任链断裂,触发ssllabs检测报错。
修复操作步骤
- 第一步:拼接完整证书链
将你持有的域名证书(通常命名为your_domain.crt)和CA机构颁发的中间证书(通常命名为intermediate.crt,部分CA会提供多段中间证书,按从域名证书到根证书的顺序依次拼接)合并为单个文件,合并命令如下:
注意:不要将根证书加入拼接列表,客户端会自行读取本地根证书池完成最终校验cat your_domain.crt intermediate.crt > your_domain.chain.crt - 第二步:替换代理容器的证书文件
进入你挂载到nginx-proxy容器的证书目录(默认挂载路径为/etc/nginx/certs),将原有your_domain.crt替换为刚才拼接好的your_domain.chain.crt,文件名保持和你配置的VIRTUAL_HOST环境变量一致,密钥文件your_domain.key不需要修改。 - 第三步:重启容器加载配置
执行重启命令加载新证书:
如果你配置了配置自动重载,也可以执行强制重载命令避免服务中断:docker restart nginx-proxydocker exec nginx-proxy nginx -s reload - 第四步:本地校验配置有效性
重启后先本地校验证书链完整性,命令如下:
输出中如果出现openssl s_client -connect your_domain.com:443 -showcertsVerify return code: 0 (ok)即代表证书链配置正常,再重新到ssllabs提交检测即可。
注意事项
如果你使用的是acme.sh等自动签发证书工具,可以在签发时直接指定生成完整链文件,不需要手动拼接,部分CA默认签发的fullchain.pem文件就是已经拼接好的完整证书链,可以直接重命名使用。
后端Apache服务不需要额外配置SSL证书,所有SSL校验逻辑由前端nginx-proxy统一处理,不要重复在Apache端配置443监听避免冲突。
内容的提问来源于stack exchange,提问作者Long Le
相关产品推荐
相关产品推荐

