将 MongoDB 8.0 集群升级为使用 TLS/SSL
MongoDB 服务器支持在同一个 TCP 端口上同时监听经过 TLS/SSL 加密的连接和未加密的连接,因此可以将 MongoDB 集群逐步升级为使用 TLS/SSL 加密连接。
注意
在支持 TLS 1.1 或更高版本的系统上,MongoDB 会禁用对 TLS 1.0 加密的支持。
操作步骤(使用 tls 设置)
重要
完整介绍 TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构超出了本文的范围。本文假定你已经了解 TLS/SSL,并且能够取得有效证书。
要将不使用 TLS/SSL 加密的 MongoDB 集群升级为仅使用 TLS/SSL 加密的集群,请按照以下过程执行滚动升级。
注意
本节使用 tls 设置或选项。使用其 ssl 别名的步骤见操作步骤(使用 ssl 设置)。
tls 设置或选项与 ssl 选项提供相同的功能,因为 MongoDB 一直支持 TLS 1.0 及更高版本。
- 对集群中的每个节点,将命令行选项
--tlsMode或配置文件选项net.tls.mode设置为allowTLS,然后启动节点。allowTLS允许节点接受经过 TLS/SSL 加密和未经过 TLS/SSL 加密的传入连接。该节点连接其他服务器时不使用 TLS/SSL。还应包含其他 TLS/SSL 选项[1],以及特定配置所需的其他选项。
注意
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 的副本集。
- 对集群中的每个节点,使用
setParameter命令将tlsMode更新为preferTLS。[2]当net.tls.mode为preferTLS时,节点接受经过 TLS/SSL 加密和未经过 TLS/SSL 加密的传入连接,而它连接其他服务器时会使用 TLS/SSL。例如:
db.adminCommand( { setParameter: 1, tlsMode: "preferTLS" } )
将集群中的所有节点都升级为使用这些设置。
此时,所有连接都应当使用 TLS/SSL。
- 对集群中的每个节点,使用
setParameter命令将tlsMode更新为requireTLS。[2]当net.tls.mode为requireTLS时,节点会拒绝所有未经过 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/SSL中的 tls 部分。
tls 设置或选项与 ssl 选项提供相同的功能,因为 MongoDB 一直支持 TLS 1.0 及更高版本。
- 对集群中的每个节点,将命令行选项
--sslMode或配置文件选项net.ssl.mode设置为allowSSL,然后启动节点。allowSSL允许节点接受经过 TLS/SSL 加密和未经过 TLS/SSL 加密的传入连接。该节点连接其他服务器时不使用 TLS/SSL。还应包含其他 TLS/SSL 选项[1],以及特定配置所需的其他选项。
注意
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 的副本集。
- 对集群中的每个节点,使用
setParameter命令将sslMode更新为preferSSL。[2]当net.ssl.mode为preferSSL时,节点接受经过 TLS/SSL 加密和未经过 TLS/SSL 加密的传入连接,而它连接其他服务器时会使用 TLS/SSL。例如:
db.adminCommand( { setParameter: 1, sslMode: "preferSSL" } )
将集群中的所有节点都升级为使用这些设置。
此时,所有连接都应当使用 TLS/SSL。
- 对集群中的每个节点,使用
setParameter命令将sslMode更新为requireSSL。[2]当net.ssl.mode为requireSSL时,节点会拒绝所有未经过 TLS/SSL 加密的连接。例如:
db.adminCommand( { setParameter: 1, sslMode: "requireSSL" } )
- 所有节点升级完成后,编辑配置文件并写入适当的 TLS/SSL 设置,确保集群在后续重启时仍使用 TLS/SSL。
[2] 除了使用 setParameter 命令,也可以使用适当的 TLS/SSL 选项和值重新启动节点。
[1] 在 Windows 和 macOS 上,可以使用系统 SSL 证书存储区。要使用系统 SSL 证书存储区,请使用以下选项:
- 使用
net.tls.certificateSelector(或命令行选项--tlsCertificateSelector)替代net.tls.certificateKeyFile(或命令行选项--certificateKeyFile)。 - 使用
net.ssl.certificateSelector(或命令行选项--sslCertificateSelector)替代net.ssl.PEMKeyFile(或命令行选项--sslPEMKeyFile)。
使用系统 SSL 证书存储区时,会通过 OCSP(在线证书状态协议)验证证书的吊销状态。











暂无评论内容