使用Let's Encrypt证书的MongoDB SSL连接未过期却突发失效问题咨询
问题根因分析
1. 核心根因:Let's Encrypt证书链配置不兼容
你遇到的是典型的Let's Encrypt旧交叉根证书过期导致的客户端校验失败问题。Nginx如果仅配置ssl_certificate为站点证书单文件,未携带完整的中间证书链,旧版本客户端的根证书存储中没有内置新的ISRG Root X1根证书,就会判定证书过期或不可信。
老版本的requests 2.3.0配套的CA证书包没有包含ISRG Root X1,升级requests时会同步升级certifi依赖包,更新了CA根证书存储,因此Python侧恢复正常。
2. Mongo Compass连接失败的直接原因
Mongo Compass内置的CA证书存储未同步更新,如果你使用的Compass版本较旧,默认信任的根证书列表中仍没有ISRG Root X1,同时你的Nginx返回的证书链缺少Let's Encrypt的中间证书,就会导致Compass无法向上追溯到可信根,误判证书过期。
3. 其他潜在触发原因
- Nginx TCP流代理的SSL配置错误:
stream块下的SSL代理需要确认ssl_certificate参数指向的是fullchain.pem而非单独的cert.pem,单独的cert.pem不包含中间证书,会导致所有需要完整链校验的客户端校验失败。 - 证书自动更新脚本异常:虽然证书本身没有过期,但更新后没有重新加载Nginx配置,或者更新后的证书链文件被替换为了单证书文件,导致证书链断裂。
- Mongo Compass的SSL配置问题:Compass连接时如果勾选了「需要验证服务器证书」,但没有手动导入ISRG Root X1根证书,同时服务端返回的链不完整,就会持续报错。
修复方案
- 优先修正Nginx配置:将
stream块下的ssl_certificate参数值替换为Let's Encrypt生成的fullchain.pem路径,ssl_certificate_key保持为privkey.pem路径,修改后执行nginx -s reload重载配置即可修复大多数客户端的校验问题。 - 针对Mongo Compass的遗留问题:要么升级到最新版的Mongo Compass(新版本已内置ISRG Root X1根证书),要么在连接配置的高级设置中手动导入ISRG Root X1根证书即可正常连接。
- 确认证书自动更新的钩子配置:确保certbot等证书更新工具在证书更新完成后会自动重载Nginx配置,避免新证书不生效。
内容的提问来源于stack exchange,提问作者Gopi Ande
相关产品推荐
相关产品推荐

