TLS 加密连接
MongoDB 的传输加密通过 TLS 建立:客户端在连接串里开启 tls=true(旧写法 ssl=true),必要时指定 CA 文件与客户端证书;服务端在 net.tls 下配置证书与模式(如 requireTLS)。托管副本集普遍强制 TLS,明文连接会被直接断开。除加密之外,客户端证书还可以代替密码做身份认证。
基本信息
| 客户端开启 | 连接串参数 tls=true(旧写法 ssl=true) |
|---|---|
| 证书参数 | tlsCAFile 指定 CA,tlsCertificateKeyFile 指定客户端证书与私钥 |
| mongosh 选项 | --tls、--tlsCAFile、--tlsCertificateKeyFile |
| 服务端配置 | net.tls.mode(如 requireTLS)、net.tls.certificateKeyFile、net.tls.CAFile |
| 证书认证 | x509 身份认证需在 external 库创建对应用户 |
| 适用版本 | 4.x / 5.x / 6.x 均支持;旧版本参数名为 ssl 前缀 |
典型使用场景
- 合规要求传输加密:跨机房或跨云访问时强制 TLS
- 托管实例接入:云服务默认要求 TLS,客户端必须配置 CA
- 证书替代密码:用客户端证书做身份认证,避免口令分发
- 证书轮换演练:确认 CA 更新后客户端能平滑切换
- 排查握手失败:区分证书过期、主机名不匹配与 CA 缺失三类原因
连接示例
连接示例
# 通过连接串开启 TLS 并指定 CA
mongosh "mongodb://app@m1:27017/app?tls=true&tlsCAFile=/etc/ssl/ca.pem&authSource=app"
# 命令行选项方式:同时提供客户端证书(可用于 x509 认证)
mongosh --tls --tlsCAFile /etc/ssl/ca.pem --tlsCertificateKeyFile client.pem \
"mongodb://app@m1:27017/app?authSource=$external"
# 验证服务端强制 TLS 后明文连接被拒绝
# mongosh "mongodb://app@m1:27017/app" -> 连接被断开或超时参数读法
| 参数 | 作用 | 使用建议 |
|---|---|---|
| tls | 开启传输加密 | 托管实例通常强制开启 |
| tlsCAFile | 校验服务端证书的 CA | 必须与签发链一致,缺失会握手失败 |
| tlsCertificateKeyFile | 客户端证书与私钥 | 用于双向认证或 x509 身份认证 |
| tlsAllowInvalidCertificates | 跳过证书校验 | 仅用于临时自测,长期开启等于放弃校验 |
| tlsInsecure | 关闭多项校验收束 | 排障时短时使用,禁止进入生产配置 |
握手失败先分三类排查:证书是否过期、连接用的主机名是否在证书主题覆盖范围内、CA 文件是否与服务端证书链匹配。三类原因的报错信息相近,逐项确认比反复改参数更有效。
tlsAllowInvalidCertificates 与 tlsInsecure 只应出现在临时排障中:它们会让加密连接失去身份校验,中间人可以替换服务端。