在 MongoDB 配置文件 mongod.conf 中开启 TLS/SSL 加密,需在 net.tls 段落设置 mode 为 requireTLS 并指定 certificateKeyFile 路径。此配置适用于生产环境数据传输加密,配置错误会导致服务无法启动或客户端连接被拒绝。
先说结论:修改 mongod.conf 配置文件是启用服务端 TLS 加密的标准方法,必须确保证书格式正确且路径权限可达。
- 适合:生产环境数据库连接加密、合规性审计要求、防止中间人攻击场景
- 先准备:生成包含 SAN 字段的 PEM 格式证书、备份原有配置文件、确认 MongoDB 版本支持 TLS 1.2+
- 验收:服务端日志无 SSL 错误、客户端强制 TLS 连接成功、非 TLS 连接被拒绝
命令速用版
在 mongod.conf 中添加以下配置片段,注意 YAML 缩进:
net:
port: 27017
tls:
mode: requireTLS
certificateKeyFile: /path/to/mongodb.pem
CAFile: /path/to/ca.pem重启服务命令:
sudo systemctl restart mongod为什么会这样
MongoDB 默认监听未加密的 TCP 连接,开启 TLS 后强制握手协商加密通道。MongoDB 在支持 TLS 1.2+ 的系统上禁用对 TLS 1.0 和 TLS 1.1 加密的支持,旧版客户端可能无法连接。
分步处理
第一步:生成或获取证书文件。使用 OpenSSL 生成私钥和证书,合并为 PEM 文件,确保证书包含 Subject Alternative Name (SAN) 字段。
第二步:编辑配置文件。找到 mongod.conf,在 net 层级下添加 tls 配置项,替换/path/to/mongodb.pem 为实际绝对路径。
第三步:调整文件权限。确保 mongod 运行用户有权读取证书文件,避免权限不足导致启动失败。
第四步:重启 MongoDB 服务。使用 systemctl restart mongod 应用配置,观察启动日志是否有 SSL 相关报错。
怎么验证是否生效
使用 mongo 客户端连接时添加`--tls` 参数,若未加该参数连接被拒绝,说明服务端已强制 TLS。检查 MongoDB 日志,确认启动过程中加载了证书文件且无 validation failed 错误。
常见坑
证书 PEM 文件顺序错误,必须证书在前私钥在后。副本集节点间通信未配置 clusterFile,导致内部同步失败。客户端连接未指定`--tlsCAFile`,导致证书验证失败。
常见问题
自签名证书可以直接用吗
测试环境可以使用自签名证书,生产环境建议使用 CA 签名证书。自签名证书需在客户端指定 CAFile 否则会被视为不安全。
开启 TLS 后端口会变吗
端口默认不变,MongoDB 支持在同一 TCP 端口监听加密和未加密连接(过渡期),但 requireTLS 模式下只接受加密连接。
参考来源
- MongoDB(75) 如何配置 TLS/SSL 加密?_mongodb 配置 ssl 自签证书-CSDN 博客
- 如何在 MongoDB 4.4 中配置 TLS/SSL 加密传输_生成并部署 PEM 证书文件
- 升级集群以使用 TLS/SSL
- 为 MongoDB 实例配置 TLS/SSL 加密