必须显式配置--tlsmode=requiretls并提供有效ca文件,否则客户端可绕过证书校验;仅设--tlscertificatekeyfile不足以启用tls,mongodb默认不启用,省略--tlscafile将导致客户端跳过服务端证书校验。

必须显式配置 --tlsMode=requireTLS 并提供有效 CA 文件,否则即使启用了 TLS,客户端仍可绕过证书校验建立连接。
启用 TLS/SSL 加密传输的最小必要参数
仅设置 --tlsCertificateKeyFile 不足以启用加密;MongoDB 默认不启用 TLS。必须同时指定 --tlsMode 才会真正开启 TLS 协议栈。
-
--tlsMode=requireTLS:强制所有连接走 TLS,非 TLS 连接会被拒绝(最常用) -
--tlsCertificateKeyFile <path></path>:必须是 PEM 格式,且包含完整证书链(服务器证书 + 中间 CA,不含私钥密码) -
--tlsCAFile <path></path>:用于验证客户端证书(若启用 x.509 认证),也影响服务端证书是否被客户端信任——**省略此参数将导致客户端跳过服务端证书校验** - 不推荐用
--tlsAllowInvalidCertificates:它会让客户端接受自签名或过期证书,等同于关闭身份校验
为什么客户端仍能连上,却没校验证书?
常见错误是只在服务端配了证书,但没传 --tlsCAFile,或客户端连接时没指定 --tlsCAFile 或对应 driver 的 tlsCAFile 选项。此时 TLS 加密通道虽建立,但服务端身份未被验证,属于“有加密、无认证”状态,易受中间人攻击。
- mongosh 连接示例:
mongosh --tls --tlsCAFile /path/to/ca.pem --host example.com:27017 - Node.js driver 示例中,
tlsCAFile必须显式传入,不能依赖系统 CA 存储 - 若用
--tlsCertificateSelector(Windows/macOS),则--tlsCAFile可省略,但该方式不跨平台,调试困难
SCRAM 与 TLS 是正交机制,别混淆
TLS 加密传输层,SCRAM 是应用层密码认证。启用 TLS 不自动启用用户认证;仍需加 --auth 和配置 authenticationMechanisms(如 SCRAM-SHA-256)。
-
--auth和--tlsMode=requireTLS必须共存才能实现“加密 + 认证”双保险 - 若仅开
--auth但没 TLS,密码明文走网络(尤其 SCRAM 在 TLS 下才安全) - 5.0 默认禁用 TLS 1.0/1.1,只支持 TLS 1.2+,无需额外关,但需确认 OpenSSL 版本 ≥ 1.1.1
最容易被忽略的是:CA 文件路径在 mongod 启动时必须可读,且文件内容必须为 PEM 格式纯文本——二进制 DER、带 BOM 的 UTF-8、多出空行都可能导致静默失败,日志里只报 Failed to load CA file 而不说明具体原因。











