MongoDB 6.0 默认不启用 TLS/SSL,必须手动配置 net.ssl 参数并提供含 SAN 的 PEM 文件(含证书与无密码私钥),禁用 TLS1_0/TLS1_1,生产环境建议启用双向认证并确保证书链完整。

MongoDB 6.0 默认不启用 TLS/SSL,必须手动配置 net.ssl 相关参数并提供有效的 PEM 文件;直接复用 Nginx 或 OpenSSL 生成的普通证书大概率失败,因为 MongoDB 对证书链、密钥格式和 SAN 字段有硬性要求。
证书必须包含 Subject Alternative Name(SAN)且匹配服务端主机名
MongoDB 6.0 强制校验证书中的 subjectAltName,即使 sslAllowConnectionsWithoutCertificates 为 true,握手阶段也会拒绝无 SAN 或 SAN 不匹配的证书。常见错误现象是客户端报错:SSL peer certificate validation failed: unable to get local issuer certificate 或连接立即中断。
- 生成私钥和证书请求时,必须通过
openssl req -addext "subjectAltName = DNS:your-hostname,DNS:localhost,IP:127.0.0.1"显式添加 SAN(OpenSSL 1.1.1+ 支持);旧版本需借助配置文件 - 自签名证书可用如下命令一步生成(替换
your-hostname):openssl req -x509 -nodes -newkey rsa:2048 -keyout mongodb-key.pem -out mongodb-cert.pem -days 365 -subj "/CN=your-hostname" -addext "subjectAltName = DNS:your-hostname,DNS:localhost,IP:127.0.0.1"
- 若部署在容器或云主机,
DNS条目必须与客户端实际连接的 hostname 完全一致(如mongo.example.com),不能只写localhost
PEM 文件必须合并为单个文件且私钥不可加密
MongoDB 6.0 的 net.ssl.PEMKeyFile 只接受一个 PEM 文件,且其中私钥部分不能带密码(即不能是 -----BEGIN ENCRYPTED PRIVATE KEY-----)。否则 mongod 启动失败,日志报错:Failed to load PEM file: error:0909006C:PEM routines:get_name:no start line 或 SSL context setup failed。
- 若已有带密码的私钥,先解密:
openssl rsa -in mongodb-key-encrypted.pem -out mongodb-key.pem
- 合并证书和私钥(顺序不能错):
cat mongodb-cert.pem mongodb-key.pem > mongodb.pem
- 确认最终文件结构:开头是
-----BEGIN CERTIFICATE-----,紧接着是-----BEGIN RSA PRIVATE KEY-----(或-----BEGIN PRIVATE KEY-----),中间无空行、无注释、无额外文本
mongod 配置中必须显式关闭弱协议并校验客户端证书(按需)
仅设置 net.ssl.mode: requireSSL 不足以保障安全——默认仍允许 TLS 1.0/1.1,且不强制验证客户端身份。生产环境应禁用旧协议,并根据场景决定是否启用双向认证。
- 在
mongod.conf中明确指定:net: ssl: mode: requireSSL PEMKeyFile: /etc/mongodb/mongodb.pem CAFile: /etc/mongodb/ca.pem # 若启用双向认证,此项必填 allowConnectionsWithoutCertificates: false # true 表示单向认证(服务端验证自己),false 表示双向(客户端也需证书) disabledProtocols: TLS1_0,TLS1_1 # MongoDB 6.0 支持 TLS1_2 和 TLS1_3 -
disabledProtocols必须用英文逗号分隔,不能有空格;值为TLS1_0而非TLSv1.0 - 若启用双向认证,客户端连接时需加参数:
--ssl --sslCAFile ca.pem --sslCertificateKeyFile client.pem
最容易被忽略的是证书链完整性:如果使用由中间 CA 签发的证书,mongodb.pem 中必须按顺序包含服务器证书、中间 CA 证书(可选)、根 CA 证书(通常不需要),但 CAFile 参数指向的必须是客户端信任的根或中间 CA 包(不含服务器证书)。漏掉中间证书会导致客户端验证失败,而服务端日志往往只显示 “SSL handshake failed”。


















