将集群升级以使用 TLS/SSL
The MongoDB server supports listening for both TLS/SSL encrypted and unencrypted connections on the same TCP port. This allows upgrades of MongoDB clusters to use TLS/SSL encrypted connections.
注意
MongoDB在支持TLS 1.1+的系统中禁用TLS 1.0加密支持。
步骤(使用tls
设置)
重要
关于TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的全貌超出了本文档的范围。本页假设用户已了解TLS/SSL,并且可以访问有效的证书。
要从不使用TLS/SSL加密的MongoDB集群升级到仅使用TLS/SSL加密的集群,请使用以下滚动升级过程。
注意
本节中的步骤使用tls
设置/选项。有关使用它们的ssl
别名的步骤,请参阅步骤(使用ssl
设置).
由于MongoDB始终支持TLS 1.0及以后版本,因此tls
设置/选项提供与ssl
选项相同的**功能**。
对于集群中的每个节点,使用命令行选项
--tlsMode
或配置文件选项net.tls.mode
设置为allowTLS
。该allowTLS
设置允许节点接受TLS/SSL和非TLS/非SSL的传入连接。它与其他服务器的连接不使用TLS/SSL。包括其他TLS/SSL选项以及您特定配置所需的任何其他选项。注意
mongod
和mongos
默认绑定到localhost。如果您的部署成员在不同的主机上运行,或者您希望远程客户端连接到您的部署,您必须指定--bind_ip
或net.bindIp
。例如
mongod --replSet <name> --tlsMode allowTLS --tlsCertificateKeyFile <TLS/SSL certificate and key file> --tlsCAFile <path to root CA PEM file> <additional options> 要在配置文件中指定这些选项,请在文件中包含以下设置
net: tls: mode: allowTLS certificateKeyFile: <path to TLS/SSL certificate and key PEM file> CAFile: <path to root CA PEM file> 升级集群的所有节点到这些设置。
将所有客户端切换到使用TLS/SSL。请参阅客户端的TLS/SSL配置。
对于集群中的每个节点,使用
setParameter
命令将tlsMode
更新为preferTLS
。 [1] 当使用preferTLS
作为其net.tls.mode
时,节点接受TLS/SSL和非TLS/非SSL的入站连接,并且其与其他服务器的连接使用TLS/SSL。例如db.adminCommand( { setParameter: 1, tlsMode: "preferTLS" } ) 升级集群的所有节点到这些设置。
此时,所有连接应使用TLS/SSL。
对于集群中的每个节点,使用
setParameter
命令将tlsMode
更新为requireTLS
。 [1] 当使用requireTLS
作为其net.tls.mode
时,节点将拒绝任何非TLS/非SSL连接。例如db.adminCommand( { setParameter: 1, tlsMode: "requireTLS" } ) 在升级所有节点后,编辑
配置文件
并设置适当的TLS/SSL设置,以确保在后续重启时,集群使用TLS/SSL。
过程(使用ssl
设置)
重要
关于TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的全貌超出了本文档的范围。本页假设用户已了解TLS/SSL,并且可以访问有效的证书。
要从不使用TLS/SSL加密的MongoDB集群升级到仅使用TLS/SSL加密的集群,请使用以下滚动升级过程。
注意
本节中的过程使用ssl
设置/选项。有关使用其tls
别名的过程,请参阅过程(使用tls
设置)。
由于MongoDB始终支持TLS 1.0及以后版本,因此tls
设置/选项提供与ssl
选项相同的**功能**。
对于集群中的每个节点,启动节点时使用命令行选项
--sslMode
或配置文件选项net.ssl.mode
设置为allowSSL
。allowSSL
设置允许节点接受TLS/SSL和非TLS/非SSL的入站连接。其与其他服务器的连接不使用TLS/SSL。包括其他TLS/SSL选项
[2]以及任何其他特定配置所需的其他选项。注意
mongod
和mongos
默认绑定到localhost。如果您的部署成员在不同的主机上运行,或者您希望远程客户端连接到您的部署,您必须指定--bind_ip
或net.bindIp
。例如
mongod --replSet <name> --sslMode allowSSL --sslPEMKeyFile <path to TLS/SSL Certificate and key PEM file> --sslCAFile <path to root CA PEM file> <additional options> 要在配置文件中指定这些选项,请在文件中包含以下设置
net: ssl: mode: <allowSSL> PEMKeyFile: <path to TLS/SSL certificate and key PEM file> CAFile: <path to root CA PEM file> 升级集群的所有节点到这些设置。
将所有客户端切换到使用TLS/SSL。请参阅客户端的TLS/SSL配置。
对于集群中的每个节点,使用
setParameter
命令来更新sslMode
为preferSSL
。 [1] 当preferSSL
作为其net.ssl.mode
时,节点接受TLS/SSL和非TLS/非SSL的入站连接,并且与其他服务器的连接使用TLS/SSL。例如db.adminCommand( { setParameter: 1, sslMode: "preferSSL" } ) 升级集群的所有节点到这些设置。
此时,所有连接应使用TLS/SSL。
对于集群中的每个节点,使用
setParameter
命令来更新sslMode
为requireSSL
。 [1] 当requireSSL
作为其net.ssl.mode
时,节点拒绝任何非TLS/非SSL连接。例如db.adminCommand( { setParameter: 1, sslMode: "requireSSL" } ) 在升级所有节点后,编辑
配置文件
并设置适当的TLS/SSL设置,以确保在后续重启时,集群使用TLS/SSL。
[1] | (1, 2, 3, 4) 作为使用setParameter 命令的替代方案,您也可以使用适当的TLS/SSL选项和值重新启动节点。 |
[2] | (1, 2) 您可以使用Windows和macOS的系统SSL证书存储。要使用系统SSL证书存储,请使用
|