客户端的 TLS/SSL 配置
客户端必须支持 TLS/SSL 才能连接到需要 TLS/SSL 连接的
mongod
或 mongos
实例。
注意
MongoDB 的 Linux 64 位旧版 x64 二进制文件不包含对 TLS/SSL 的支持。
MongoDB 在支持 TLS 1.1+ 的系统上禁用对 TLS 1.0 加密的支持。
重要
TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的完整描述已超出本文档的范围。本页假设您已了解 TLS/SSL 并可访问有效证书。
MongoDB Shell
mongosh
提供各种 TLS/SSL 设置,包括:
TLS 选项 | 注意 |
---|---|
启用 TLS/SSL 连接。 | |
如果 | |
如果运行于 Windows 或 macOS 上,则请使用系统证书存储区中的证书。 此选项与 如果显示的 x.509 证书在 |
有关 mongosh
的 tls
选项的完整列表,请参阅 TLS 选项。
对于 TLS/SSL 连接,mongosh
会验证 mongod
或 mongos
实例提供的证书:
mongosh
可确保该证书来自指定的证书颁发机构 (--tlsCAFile
)。如果该证书并非来自指定的 CA,mongosh
无法连接。mongosh
会确保该主机名(在--host
选项或连接字符串中指定)与mongod
或
mongos
所提供证书中的
SAN
(或者,如果SAN
不存在,则为
CN
)匹配。如果
SAN
存在,mongosh
则与CN
不匹配。如果主机名与SAN
(或CN
)不匹配,mongosh
将无法连接。从 MongoDB 4.2 开始,在比较 SAN 时,MongoDB 可以比较 DNS 名称或 IP 地址。在之前的版本中,MongoDB 仅能比较 DNS 名称。
要将
mongosh
连接到需要 TLS/SSL 的mongod
或mongos
,请指定--host
选项或使用连接字符串来指定主机名。所有其他TLS/SSL
选项必须使用命令行选项来指定。
通过加密方式连接 MongoDB 实例
要连接到需要加密通信的
mongod
或 mongos
实例,请使用以下选项来启动 mongosh
:
--host
和--tlsCAFile
用于验证服务器证书。
例如,在 hostname.example.com
上运行的
mongod
实例附带以下选项:
mongod --tlsMode requireTLS --tlsCertificateKeyFile <pem>
要连接到该实例,请使用以下选项来启动 mongosh
:
mongosh --tls --host hostname.example.com --tlsCAFile /etc/ssl/caToValidateServerCertificates.pem
连接到需要客户端证书的 MongoDB 实例
要连接需要 CA 签名的客户端证书的
mongod
或 mongos
,请使用以下选项来启动 mongosh
:
--host
和--tlsCAFile
用于验证服务器证书,--tlsCertificateKeyFile
选项,用于指定要提供给服务器的客户端证书。
例如,在 hostname.example.com
上运行的
mongod
实例附带以下选项:
mongod --tlsMode requireTLS --tlsCertificateKeyFile /etc/ssl/mongodb.pem --tlsCAFile /etc/ssl/caToValidateClientCertificates.pem
要连接到该实例,请使用以下选项来启动 mongosh
:
mongosh --tls --host hostname.example.com --tlsCertificateKeyFile /etc/ssl/client.pem --tlsCAFile /etc/ssl/caToValidateServerCertificates.pem
Windows 和 macOS
要指定系统证书存储区中的客户端证书,请使用 --tlsCertificateSelector
选项而非 --tlsCertificateKeyFile
。
如果 CA 文件也在系统证书存储中,则可以省略 --tlsCAFile
选项。
例如,如果 CN
(公用名)为 myclient.example.net
的证书和随附的 CA 文件都位于 macOS 系统证书存储中,则可以按以下方式进行连接:
mongosh --tls --host hostname.example.com --tlsCertificateSelector subject="myclient.example.net"
这些选项在 mongosh
中仍然可用,但您应当改用 tls
替代方案。
避免使用 --tlsAllowInvalidCertificates
选项
警告
尽管可以使用,但应尽量避免使用 --tlsAllowInvalidCertificates
选项。如果必须使用 --tlsAllowInvalidCertificates
,则应当仅在不可能发生入侵的系统上使用该选项。
如果 mongosh
使用 --tlsAllowInvalidCertificates
选项来运行,mongosh
则不会尝试验证服务器证书。此举会对已过期的 mongod
和 mongos
证书以及冒充有效 mongod
或 mongos
实例的外部进程形成漏洞。如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅 --tlsAllowInvalidHostnames
。
MongoDB Atlas、MongoDB Cloud Manager 和 MongoDB Ops Manager
MongoDB Atlas 使用 TLS/SSL 对到数据库连接进行加密。
MongoDB Cloud Manager 和 Ops Manager 的监控代理使用加密通信来收集统计数据。由于这些代理已经对与 MongoDB Cloud Manager/Ops Manager 服务器的通信进行加密,因此仅需在 MongoDB Cloud Manager/Ops Manager 中为每个主机启用 TLS/SSL 支持即可。
有关更多信息,请参阅:
MongoDB 驱动程序
MongoDB 驱动程序支持加密通信。有关详细信息,请参阅:
MongoDB 工具
多种 MongoDB 实用程序都支持加密通信。这些工具包括:
要使用这些工具进行加密通信,请使用与 mongosh
相同的
tls
选项。请参阅 MongoDB Shell。