客户端的 TLS/SSL 配置
客户端必须支持 TLS/SSL 才能连接到需要 TLS/SSL 连接的 mongod
或 mongos
实例。
注意
MongoDB 的 Linux 64 位旧版 x64 二进制文件不包含对 TLS/SSL 的支持。
MongoDB 禁用对 TLS 1的支持。在使用 TLS 1的系统上进行0加密。 1 + 可用。
重要
TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的完整描述已超出本文档的范围。本页假设您已了解 TLS/SSL 并可访问有效证书。
MongoDB Shell
mongosh
提供各种 TLS/SSL 设置,
包括:
TLS 选项 | 注意 |
---|---|
启用 TLS/SSL 连接。 | |
指定包含 如果提供的 x,则 | |
如果 mongosh 的证书密钥文件已加密。 | |
如果运行于 Windows 或 macOS 上,则请使用系统证书存储中的证书。(4.0 版本新增) 此选项与 如果提供的 x,则 |
有关mongosh
的tls
选项的完整列表,请参阅TLS 选项。
对于 TLS/SSL 连接, mongosh
会验证mongod
或mongos
实例提供的证书:
mongosh
验证该证书是否来自指定的证书颁发机构 (--tlsCAFile
。如果证书不是来自指定的 CA,mongosh
将无法连接。mongosh
验证主机名(在CN
--host
选项或连接字符串中指定)是否与SAN
mongod
SAN
mongos
。如果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。