必须显式配置disabledprotocols禁用tls 1.0和1.1,仅设mode: requiretls不足;mongodb 4.4+支持该配置,需在net.tls块中严格按tls1_0,tls1_1格式设置并重启服务。

必须显式禁用 TLS 1.0 和 1.1,仅靠 mode: requireTLS 不足以达成目标;MongoDB 7.0+ 默认禁用 TLS 1.0,但 TLS 1.1 仍可能被协商成功,除非你主动关闭它。
确认当前 MongoDB 版本是否支持 disabledProtocols
MongoDB 4.4+ 才引入 disabledProtocols 配置项,4.2 及更早版本不支持。运行以下命令验证:
mongod --version
若输出为 db version v4.2.25 或更低,无法通过配置文件限制协议版本,只能升级服务端或依赖客户端强制指定 TLS 版本(不可靠)。
在 /etc/mongod.conf 中设置 disabledProtocols
该配置必须放在 net.tls 块内,且大小写敏感、值之间用英文逗号分隔:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/ca.pem
disabledProtocols: TLS1_0,TLS1_1
注意以下几点:
-
TLS1_0和TLS1_1是合法值,TLSv1.0或tls1.1会导致 mongod 启动失败并报错Invalid value for disabledProtocols - 配置后必须重启服务:
sudo systemctl restart mongod - 重启失败时检查日志:
sudo journalctl -u mongod -n 50 --no-pager,常见错误是证书路径错误或权限不足(certificateKeyFile必须可被mongod用户读取)
验证 TLS 协议是否真正被拒绝
不能只看 mongod 启动成功就认为生效。需用客户端主动降级测试:
- 使用 OpenSSL 模拟 TLS 1.1 连接:
openssl s_client -connect localhost:27017 -tls1_1,预期返回SSL routines:tls_process_server_hello:protocol is down或直接断连 - 使用 TLS 1.2 连接应成功:
openssl s_client -connect localhost:27017 -tls1_2 - Atlas 用户注意:2025年7月31日起平台将全局拒绝 TLS 1.0/1.1,但你的自建集群不会自动同步该策略,必须手动配置
disabledProtocols
客户端连接时仍需显式指定 TLS 参数
服务端限制了协议版本,不代表客户端能自动适配。例如 mongo shell 必须加 --tls,否则会因未启用 TLS 被拒绝:
mongo --tls --tlsCAFile /etc/ssl/ca.pem --host localhost:27017
常见疏漏点:
- Node.js 驱动中若使用
ssl: true但未设minVersion: 'TLSv1.2',某些旧版 OpenSSL 可能仍尝试协商 TLS 1.1 - Java 驱动需在连接字符串中添加
&sslEnabled=true&sslInvalidHostNameAllowed=true(仅测试环境),生产环境必须配sslContext并设置protocols = ["TLSv1.2", "TLSv1.3"] - Python PyMongo 默认启用 TLS 1.2+,但若系统 OpenSSL disabledProtocols 才是最后一道防线
最容易被忽略的是:即使配置了 disabledProtocols,如果证书链不完整(比如缺中间 CA)、或 CAFile 路径指向了错误文件,mongod 会静默降级到非 TLS 模式(当 mode 设为 preferTLS 时),而你根本收不到告警。务必用 openssl s_client 实测,而不是只信配置文件语法正确。











