mongodb 4.4+ 中 ssl 配置项已弃用,全部替换为 tls 选项;--ssl 等参数仅兼容存在,会触发日志警告,且无法启用 tls 1.3、alpn 等新特性,驱动与 mongosh 5.0+ 已完全移除 ssl 支持。

因为 SSL 协议本身已被弃用,MongoDB 4.4+ 中的 ssl* 配置项只是兼容性别名,实际底层全部走 TLS 栈;继续用 --ssl 或 net.ssl.mode 不仅语义过时,还会在日志里触发弃用警告。
SSL 选项在 MongoDB 4.4+ 中已标记为 deprecated
MongoDB 自 4.2 起就明确将所有 ssl 前缀的命令行参数和配置项(如 --ssl、--sslPEMKeyFile、net.ssl.mode)设为软弃用;到 4.4 版本,文档和日志中会直接出现类似 "ssl options are deprecated, use tls options instead" 的提示。
-
sslMode和tlsMode实际指向同一内部字段,但前者不再被推荐写入配置文件 - 使用
--ssl启动时,mongod 仍能运行,但会输出 WARN 级日志,且某些新 TLS 功能(如 ALPN 协商、TLS 1.3 支持)无法通过 ssl 参数启用 - 驱动和 mongosh 在 5.0+ 中已完全移除对
ssl连接字符串参数的支持,只认tls相关键名
为什么 TLS 是更安全、更可控的选择
TLS 不是“SSL 的升级版”,而是协议栈的重新设计。SSL 3.0 已被证实存在 POODLE 等不可修复漏洞,IETF 自 2015 年起正式禁止其使用。MongoDB 切换到 tls 命名,本质是同步行业标准,并暴露更多可调参数。
-
--tlsMode requireTLS比--sslMode requireSSL更明确:它强制所有连接(包括节点间复制、shard router 到 config server)都走 TLS 握手,而非仅“尝试协商” -
net.tls.certificateKeyFile支持 PEM 与 PKCS#12 双格式,而旧sslPEMKeyFile仅支持 PEM,对 Windows 环境集成不友好 - TLS 配置项新增了
net.tls.FIPSMode和net.tls.allowConnectionsWithoutCertificates,控制粒度远超 SSL 时代
迁移时最容易忽略的三个兼容性坑
直接替换配置名 ≠ 安全生效。很多团队改完 ssl → tls 就以为完成,结果连接失败或证书校验绕过。
- 客户端必须同步更新:mongosh 要用
--tls --tlsCAFile,不能混用--ssl --sslCAFile;连接字符串中ssl=true必须改为tls=true -
net.tls.mode: allowTLS允许明文连接,但节点间通信默认仍走非加密通道——需额外设net.tls.clusterFile并在replSetReconfig中启用clusterAuthMode: x509才能加密复制流量 - 证书 SAN(Subject Alternative Name)必须包含节点真实访问地址:如果用 IP 连接,证书里没写
IP:192.168.1.10,即使--tlsCAFile正确也会报"hostname doesn't match certificate"
真正麻烦的不是改参数名,而是验证每条链路——客户端→mongos、mongos→shard、shard→config server、arbiter→primary——是否都落在 requireTLS 范围内,且证书信任链完整。漏掉任意一环,就等于在加密管道里开了个明文口子。











