客户端 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。