客户端的 TLS/SSL 配置
客户端必须支持 TLS/SSL 才能连接到 mongod
或者mongos
的实例需要 TLS/SSL 连接。
[NOTE]
- MongoDB的Linux 64 位遗留 x64二进制文件**不**包括对 TLS/SSL 的支持。
- 从 4.0 版开始,MongoDB在 TLS 1.1+ 可用的系统上禁用对 TLS 1.0 加密的支持。有关详细信息,请参阅禁用 TLS 1.0 。
[IMPORTANT]
TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的完整描述超出了本文档的范围。此页面假定您事先了解 TLS/SSL 以及对有效证书的访问权限。
mongosh
配置(使用tls
选项)
[NOTE]
从 4.2 版本开始,MongoDB 提供
tls
了与选项相对应的ssl
选项。这些tls
选项提供 与选项相同的功能,ssl
因为 MongoDB 一直支持 TLS 1.0 及更高版本。本节中的过程使用这些
tls
选项。有关使用其ssl
别名的过程,请参见mongosh
配置(使用ssl
选项)。
mongosh
提供各种 TLS/SSL 设置,包括:
TLS 选项(4.2 中的新功能) | 笔记 |
---|---|
--tls |
启用 TLS/SSL 连接。 |
--tlsCertificateKeyFile |
指定.pem 包含的文件 mongosh 要呈现给mongod 或mongos 实例的证书和密钥。此选项与 --tlsCertificateSelector 在4.4版中更改:mongod /mongos 如果提供的 x.509 证书在主机系统时间30 的几天内过期,则在连接时记录警告。mongod/mongos 有关详细信息,请参阅 x.509 证书即将到期触发器警告。 |
--tlsCertificateKeyFilePassword |
如果mongosh 的证书密钥文件已加密。 |
--tlsCAFile |
指定用于验证实例提供的证书的证书颁发机构 (CA).pem 文件 。mongod mongos |
--tlsCertificateSelector |
如果在 Windows 或 macOS 上运行,请使用系统证书存储中的证书。( 4.0 版新功能)此选项与 --tlsCertificateKeyFile .在4.4版中更改:mongod /mongos 如果提供的 x.509 证书在主机系统时间30 的几天内过期,则在连接时记录警告。mongod/mongos 有关详细信息,请参阅 x.509 证书即将到期触发器警告。 |
完整列表mongosh
的tls
选项,请参阅mongosh-shell-tls 。
对于 TLS/SSL 连接,mongosh
验证mongod
or mongos
实例提供的证书:
mongosh
验证证书是否来自指定的证书颁发机构 (--tlsCAFile
. 如果证书不是来自指定的 CA,mongosh
将无法连接。mongosh
验证主机名(在--host
选项或连接字符串) 与 或 提供的证书中的( 或者SAN
,如果SAN
不存在,则) 匹配。如果存在,CN
mongod
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 实例(tls
选项)
[NOTE]
该过程使用
tls
选项(从 MongoDB 4.2 开始可用)。有关使用其ssl
别名的过程,请参见mongosh
配置(使用ssl
选项)。
要连接到mongod
或者mongos
的实例需要加密通信,请启动mongosh
和:
--tls
--host
和--tlsCAFile
验证服务器证书。
例如,考虑使用以下选项mongod
运行的实例 :hostname.example.com
mongod --tlsMode requireTLS --tlsCertificateKeyFile <pem>
要连接到实例,请启动mongosh
具有以下选项:
mongosh --tls --host hostname.example.com --tlsCAFile /etc/ssl/caToValidateServerCertificates.pem
mongosh
根据指定的主机名和 CA 文件验证mongod
实例提供的证书。
连接到需要客户端证书的 MongoDB 实例(tls
选项)
[NOTE]
该过程使用
tls
选项(从 MongoDB 4.2 开始可用)。有关使用其ssl
别名的过程,请参见mongosh
配置(使用ssl
选项)。
要连接到mongod
或mongos
需要CA 签名的客户端证书,请开始mongosh
和:
--tls
--host
和--tlsCAFile
验证服务器证书,--tlsCertificateKeyFile
选项指定要呈现给服务器的客户端证书。
例如,考虑使用以下选项mongod
运行的实例 :hostname.example.com
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
(Common Name) 的 证书myclient.example.net
和随附的 CA 文件都在 macOS 系统证书存储中,您可以这样连接:
mongosh --tls --host hostname.example.com --tlsCertificateSelector subject="myclient.example.net"
--ssl
--sslCAFile
--sslPEMKeyFile
--sslCertificateSelector
中有可用的mongosh
,但您应该改用tls
替代品。
避免使用--tlsAllowInvalidCertificates
选项
[WARNING]
尽管可用,但请避免使用
--tlsAllowInvalidCertificates
如果可能的话。如果使用--tlsAllowInvalidCertificates
是必要的,仅在无法入侵的系统上使用该选项。如果
mongosh
运行与--tlsAllowInvalidCertificates
选项,mongosh
不会尝试验证服务器证书。这会导致过期mongod
和mongos
证书以及伪装成有效mongod
或mongos
实例的外部进程的漏洞。如果您只需要禁用 TLS/SSL 证书中主机名的验证,请参阅--tlsAllowInvalidHostnames
.
**mongosh
配置(使用ssl
选项)**
mongosh
提供各种 TLS/SSL 设置,包括:
SSL 选项(在 4.2 中弃用) | 笔记 |
---|---|
--ssl |
启用 TLS/SSL 连接。 |
--sslPEMKeyFile |
指定.pem 包含的文件 mongosh 要呈现给mongod 或mongos 实例的证书和密钥。 |
--sslPEMKeyPassword |
如果mongosh 的证书密钥文件已加密。 |
--sslCAFile |
指定用于验证实例提供的证书的证书颁发机构 (CA).pem 文件 。mongod mongos |
--sslCertificateSelector |
如果在 Windows 或 macOS 上运行,请使用系统证书存储中的证书。( 4.0 版新功能) |
有关ssl
选项的完整列表,请参阅SSL 选项。
对于 TLS/SSL 连接,mongosh
验证mongod
or mongos
实例提供的证书:
mongosh
验证证书是否来自指定的证书颁发机构--sslCAFile
。如果证书不是来自指定的 CA,mongosh
将无法连接。mongosh
验证主机名(在--host
选项或连接字符串) 与 或 提供的证书中的( 或者SAN
,如果SAN
不存在,则) 匹配。如果存在,CN
mongod
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 实例(--ssl
选项)
[NOTE]
该过程使用
ssl
选项。有关使用tls
别名的过程(从 MongoDB 4.2 开始可用),请参阅 mongo-shell-tls 。
要连接到mongod
或mongos
实例需要加密通信,请启动mongosh
和:
--ssl
--host
并--sslCAFile
验证服务器证书。
例如,考虑使用以下选项mongod
运行的实例 :hostname.example.com
mongod --sslMode requireSSL --sslPEMKeyFile <pem>
要连接到实例,请启动mongosh
具有以下选项:
mongosh --ssl --host hostname.example.com --sslCAFile /etc/ssl/caToValidateServerCertificates.pem
mongosh
根据指定的主机名和 CA 文件验证mongod
实例提供的证书。
连接到需要客户端证书的 MongoDB 实例(ssl
选项)
[NOTE]
该过程使用
ssl
选项。有关使用tls
别名的过程(从 MongoDB 4.2 开始可用),请参阅mongosh
配置(使用tls
选项)。
要连接到mongod
或mongos
需要CA 签名的客户端证书,请开始mongosh
和:
--ssl
--host
和--sslCAFile
验证服务器证书,--sslPEMKeyFile
选项指定要呈现给服务器的客户端证书。
例如,考虑使用以下选项mongod
运行的实例 :hostname.example.com
mongod --sslMode requireSSL --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem
要连接到实例,请启动mongosh
具有以下选项:
mongosh --ssl --host hostname.example.com --sslPEMKeyFile /etc/ssl/client.pem --sslCAFile /etc/ssl/ca.pem
在 Windows 和 macOS 上
您还可以使用该--sslCertificateSelector
选项从系统证书存储区指定客户端证书,而不是使用 --sslPEMKeyFile
. 如果 CA 文件也在系统证书存储中,则可以省略该--sslCAFile
选项。
例如,要在 macOS 上使用系统证书存储中的CN
(通用名称) 证书myclient.example.net
和 CA 文件,请启动mongosh
具有以下选项:
mongosh --ssl --host hostname.example.com --sslCertificateSelector subject=myclient.example.net
避免使用--sslAllowInvalidCertificates
选项
[WARNING]
--sslAllowInvalidCertificates
尽管可用,但请尽可能避免使用该 选项。如果--sslAllowInvalidCertificates
必须使用 ,请仅在无法入侵的系统上使用该选项。如果
mongosh
(和别的 MongoDB 工具) 与--sslAllowInvalidCertificates
选项一起运行,mongosh
(和别的 MongoDB 工具) 不会尝试验证服务器证书。这会导致过期mongod
和mongos
证书以及伪装成有效mongod
或mongos
实例的外部进程的漏洞。如果您只需要禁用 TLS/SSL 证书中主机名的验证,请参阅--sslAllowInvalidHostnames
。
MongoDB Atlas , MongoDB Cloud Manager和 MongoDB Ops Manager
MongoDB Atlas使用 TLS/SSL 来加密与数据库的连接。
MongoDB Cloud Manager和 Ops Manager Monitoring 代理使用加密通信来收集其统计信息。因为代理已经加密了与MongoDB Cloud Manager /Ops Manager 服务器的通信,所以这只是在每个主机的基础上在MongoDB Cloud Manager /Ops Manager 中启用 TLS/SSL 支持的问题。
有关详细信息,请参阅:
MongoDB 驱动程序
MongoDB 驱动程序支持加密通信。看:
- C Driver
- C++ Driver
- C# Driver
- Java Driver
- Node.js Driver
- Perl Driver
- PHP Driver
- Python Driver
- Ruby Driver
- Scala Driver
MongoDB 工具
各种 MongoDB 实用程序支持加密通信。这些工具包括:
要使用这些工具进行加密通信,请使用ssl
与 mongosh
. 看mongosh
配置(使用ssl
选项)。
[TIP]
也可以看看:
参见
原文 - TLS/SSL Configuration for Clients
译者:景圣