MongoDB 6.0 默认允许 TLS 1.0/1.1,需显式配置 disabledProtocols: "TLS1_0,TLS1_1"(配置文件)或 --sslDisabledProtocols(命令行)禁用,该参数由 MongoDB 自行解析执行,不依赖系统 OpenSSL 设置,且配置后必须重启生效。

MongoDB 6.0 默认仍允许 TLS 1.0 和 TLS 1.1,必须显式配置 sslDisabledProtocols 才能禁用——不设就等于开着。
sslDisabledProtocols 是什么,为什么不能靠系统或 OpenSSL 配置代替
这个参数是 MongoDB 自己解析并强制执行的 TLS 协议黑名单,作用在 mongod/mongos 的 SSL/TLS 握手层。即使你把系统 OpenSSL 升级到 3.x、禁用老协议,MongoDB 6.0 仍会自己协商 TLS 1.0/1.1(只要客户端提了),除非它明确看到 sslDisabledProtocols。
- 只对启用 TLS 的场景生效(即配置了
sslMode: requireSSL或sslMode: allowSSL) - 值为字符串数组,大小写敏感,可选值只有:
"TLS1_0"、"TLS1_1"、"TLS1_2"、"TLS1_3" - 不支持通配符或正则;写错值(如
"TLS10")会导致启动失败,报错:Invalid sslDisabledProtocols value
如何在 config 文件中正确配置(推荐方式)
直接修改 mongod.conf(或 mongos.conf),在 net.ssl 下添加该字段:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/mongodb/mongodb.pem
disabledProtocols: "TLS1_0,TLS1_1"
注意:disabledProtocols 是 YAML 键名,不是 sslDisabledProtocols ——这是文档里容易看错的地方。6.0+ 的配置文件使用的是 disabledProtocols(去掉前缀 ssl),而命令行参数才是 --sslDisabledProtocols。
- 多个协议用英文逗号分隔,**不能有空格**(
"TLS1_0, TLS1_1"会解析失败) - 配置后必须重启 mongod,热重载不生效
- 验证是否生效:用
openssl s_client -connect localhost:27017 -tls1测试,应返回SSL handshake failed
命令行启动时怎么传(适合测试或容器环境)
如果不用配置文件,而是用 mongod 命令启动,参数名是 --sslDisabledProtocols,且必须和 --sslMode 等其他 SSL 参数一起出现:
mongod --sslMode requireSSL \
--sslPEMKeyFile /etc/mongodb/mongodb.pem \
--sslDisabledProtocols "TLS1_0,TLS1_1"
- 值必须用双引号包裹,否则 shell 会拆分逗号
- 不能写成
--sslDisabledProtocols TLS1_0 TLS1_1(空格分隔会被当两个参数) - Docker 中建议通过
command覆盖 entrypoint,避免因 shell 解析顺序导致参数错位
最容易被忽略的一点:禁用 TLS 1.0/1.1 后,旧版驱动(比如 pymongo


















