客户端 TLS/SSL 配置
客户端必须支持 TLS/SSL 才能连接到mongod
或一个需要 TLS/SSL 连接 的 mongos
实例。
注意
MongoDB 的 Linux 64 位 legacy x64 二进制文件不包含对 TLS/SSL 的支持。
MongoDB在系统提供 TLS 1.1+ 的情况下,禁用了对 TLS 1.0 加密的支持。
重要
关于 TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的完整描述超出了本文档的范围。本页面假定您已经了解 TLS/SSL 并可以访问有效的证书。
MongoDB Shell
mongosh
提供了各种 TLS/SSL 设置,包括
TLS 选项 | 说明 |
---|---|
启用 TLS/SSL 连接。 | |
如果 mongosh 的证书密钥文件被加密。 | |
如果在 Windows 或 macOS 上运行,请使用系统证书存储中的证书。 此选项与
|
有关 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 实例
要连接到需要mongod
或mongos
且需要CA签名的客户端证书的服务器,请使用以下命令启动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 云管理器以及 MongoDB Ops Manager
MongoDB Atlas使用 TLS/SSL 加密数据库连接。
和MongoDB 云管理器以及 Ops Manager 监控代理使用加密通信来收集其统计数据。因为这些代理已经加密了与MongoDB 云管理器/运维管理服务器,这只是在每个主机上启用TLS/SSL支持的问题。MongoDB 云管理器/。
有关更多信息,请参阅
MongoDB 驱动程序
MongoDB 驱动程序支持加密通信。有关详情,请参阅
MongoDB 工具
各种 MongoDB 工具程序支持加密通信。这些工具包括
要使用这些工具的加密通信,请使用与mongosh
相同的tls
选项。请参阅MongoDB Shell。