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

MongoDB SSL/TLS CA不被信任,Let's Encrypt配置连接异常求助

解决MongoDB使用Let's Encrypt证书连接时必须指定--CAFile和--PEMKeyFile的问题

我之前也踩过这个坑,用Let's Encrypt给MongoDB配置SSL加密后,每次连接都得手动带--CAFile和--PEMKeyFile参数,不然就弹出那个让人摸不着头脑的transport error,跟你遇到的一模一样。这个问题本质是MongoDB默认不会自动信任Let's Encrypt的根证书,而且客户端连接时需要正确的证书链配置。下面是我亲测有效的解决步骤:

一、先确认服务端证书配置没问题

首先得确保MongoDB服务端已经用上了完整的Let's Encrypt证书链——Let's Encrypt的域名证书需要和中间证书搭配使用,不然客户端没法完成证书验证:

  • 你可以直接用Let's Encrypt生成的fullchain.pem(这个文件已经包含了域名证书和中间证书),配合私钥privkey.pem来配置服务端的SSL:
    net:
      ssl:
        mode: requireSSL
        PEMKeyFile: /etc/letsencrypt/live/example.com/privkey.pem
        CAFile: /etc/letsencrypt/live/example.com/fullchain.pem
    

    提示:别单独用cert.pem,它只有域名证书,缺少中间证书会导致客户端验证失败。

二、让客户端自动处理SSL参数

如果不想每次连接都手动敲一堆参数,可以从两个层面解决:

1. 把Let's Encrypt根证书加入系统信任库

MongoDB客户端会优先使用系统信任的根证书,只要Let's Encrypt的根证书(ISRG Root X1)在系统信任列表里,客户端就能自动验证服务端证书,不用再指定--CAFile:

  • Linux系统:
    把ISRG Root X1证书文件复制到/etc/pki/ca-trust/source/anchors/,然后运行update-ca-trust更新信任库。
  • macOS系统:
    打开钥匙串访问,导入ISRG Root X1证书,然后设置为“始终信任”。

2. 配置MongoDB客户端默认选项

在你的用户主目录下创建.mongorc.js文件,添加以下内容,让mongo shell启动时自动加载SSL配置:

// 如果不需要客户端证书认证(仅服务端验证),用这个配置
var defaultSslOptions = {
  ssl: true
};

// 如果需要双向认证(客户端也得提供证书),加上sslPEMKeyFile
// var defaultSslOptions = {
//   ssl: true,
//   sslPEMKeyFile: '/path/to/your/client-cert.pem'
// };

// 自动应用配置
if (typeof connection !== 'undefined') {
  connection.setDefaultSSLConfig(defaultSslOptions);
}

这样下次直接运行mongo mongodb://example.com:27017就能正常连接了。

三、排查常见问题

如果配置后还是报错,检查这几点:

  • 证书权限:确保证书文件的权限是600,并且MongoDB进程、客户端用户都能读取这些文件。
  • 证书有效期:Let's Encrypt证书只有90天有效期,续期后记得重启MongoDB服务。
  • 端口与防火墙:确认27017端口对外开放,服务端监听的IP地址正确(别只监听127.0.0.1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:33:20