将 MongoDB 8.0 集群升级为使用 TLS/SSL

将 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 及更高版本。

  1. 对集群中的每个节点,将命令行选项 --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>

将集群中的所有节点都升级为使用这些设置。

  1. 将所有客户端切换为使用 TLS/SSL。请参阅连接启用了 TLS 的副本集。
  2. 对集群中的每个节点,使用 setParameter 命令将 tlsMode 更新为 preferTLS。[2]当 net.tls.mode 为 preferTLS 时,节点接受经过 TLS/SSL 加密和未经过 TLS/SSL 加密的传入连接,而它连接其他服务器时会使用 TLS/SSL。例如:
db.adminCommand( { setParameter: 1, tlsMode: "preferTLS" } )

将集群中的所有节点都升级为使用这些设置。

此时,所有连接都应当使用 TLS/SSL。

  1. 对集群中的每个节点,使用 setParameter 命令将 tlsMode 更新为 requireTLS。[2]当 net.tls.mode 为 requireTLS 时,节点会拒绝所有未经过 TLS/SSL 加密的连接。例如:
db.adminCommand( { setParameter: 1, tlsMode: "requireTLS" } )
  1. 所有节点升级完成后,编辑配置文件并写入适当的 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 及更高版本。

  1. 对集群中的每个节点,将命令行选项 --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>

将集群中的所有节点都升级为使用这些设置。

  1. 将所有客户端切换为使用 TLS/SSL。请参阅连接启用了 TLS 的副本集。
  2. 对集群中的每个节点,使用 setParameter 命令将 sslMode 更新为 preferSSL。[2]当 net.ssl.mode 为 preferSSL 时,节点接受经过 TLS/SSL 加密和未经过 TLS/SSL 加密的传入连接,而它连接其他服务器时会使用 TLS/SSL。例如:
db.adminCommand( { setParameter: 1, sslMode: "preferSSL" } )

将集群中的所有节点都升级为使用这些设置。

此时,所有连接都应当使用 TLS/SSL。

  1. 对集群中的每个节点,使用 setParameter 命令将 sslMode 更新为 requireSSL。[2]当 net.ssl.mode 为 requireSSL 时,节点会拒绝所有未经过 TLS/SSL 加密的连接。例如:
db.adminCommand( { setParameter: 1, sslMode: "requireSSL" } )
  1. 所有节点升级完成后,编辑配置文件并写入适当的 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(在线证书状态协议)验证证书的吊销状态。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容