MongoDB 6.0 不支持 sslCAFile,因其已完全弃用并静默忽略;必须使用 tlsCAFile 配合 tlsMode: requireTLS 才生效,且需确保路径、权限、证书格式及客户端证书链完整匹配。

直接说结论:MongoDB 6.0 不支持通过 sslCAFile 配置项加载自签名或私有 CA 证书来验证客户端或服务器身份 —— 这个配置项在 6.0 中已废弃,且仅在极少数旧版兼容路径中被忽略,实际不生效。
为什么 sslCAFile 在 MongoDB 6.0 中无效
MongoDB 自 4.2 起逐步弃用 SSL 相关前缀配置(如 sslCAFile、sslPEMKeyFile),6.0 完全转向 TLS 配置体系。sslCAFile 不会被解析,也不会报错,但 TLS 握手时仍会使用系统默认信任库(如 Linux 的 /etc/ssl/certs/ca-certificates.crt)或完全跳过 CA 验证(取决于 tlsMode 和其他参数组合)。
- 即使你在配置文件里写了
sslCAFile: /path/to/mongodb-test-ia.crt,mongod 启动日志里也不会提示加载成功,也**不会**用于校验客户端证书 - 真正起作用的是
tlsCAFile(注意前缀是tls,不是ssl) -
sslCAFile仅在 3.6 及更早版本中有效;6.0 解析器会静默忽略它
tlsCAFile 应该放在哪?怎么指定才生效
必须使用 tlsCAFile,且需配合 tlsMode: requireTLS 或 preferTLS,并在启用 x.509 身份验证时强制校验客户端证书链。
- 配置位置:只接受绝对路径,例如
/etc/mongodb/tls/mongodb-test-ia.crt,不能用相对路径或环境变量 - 文件内容:必须是 PEM 格式、不含密码的 CA 证书(即中间 CA 或根 CA 的
.crt文件,不是.key) - 权限要求:mongod 进程用户(通常是
mongodb)必须有读取权限,否则启动失败并报错Unable to load certificate authority file - 典型配置片段(YAML 格式):
net: tls: mode: requireTLS certificateKeyFile: /etc/mongodb/tls/server.pem CAFile: /etc/mongodb/tls/mongodb-test-ia.crt
常见错误现象与排查点
你以为 CA 加载成功了,其实握手根本没走 CA 验证 —— 这是最容易误判的地方。
- 客户端用错误的 CN 或缺失 SAN 连接,却能成功:说明
tlsCAFile没生效,或tlsMode设成了allowTLS(允许明文) - 启动时报
error:0909006C:PEM routines:get_name:no start line:证书文件开头不是-----BEGIN CERTIFICATE-----,可能混入了空格、BOM 或 Windows 换行符 - 连接时提示
unable to get local issuer certificate(来自 mongo shell 或 mongosh):说明客户端未配置对应 CA,和服务器端tlsCAFile无关 —— 服务器不“发送”CA,只“要求客户端证书被该 CA 签发” - 用
openssl s_client -connect localhost:27017 -CAfile /path/to/ca.crt测试失败,但 mongod 日志无报错:说明 CA 文件路径正确,但可能tlsMode未设为requireTLS,导致服务端未开启双向验证
真正关键的不是“有没有指定 CA 文件”,而是整条 TLS 验证链是否闭环:CA 文件路径对、权限对、tlsMode 对、客户端证书由该 CA 签发、客户端连接时也带证书 —— 少一环,tlsCAFile 就只是个摆设。











