升级群集以使用 TLS/SSL

Important

TLS/SSL,PKI(公钥基础结构)证书和证书颁发机构的完整描述不在本文档的范围之内。该页面假定您具有 TLS/SSL 的先验知识以及对有效证书的访问权限。

MongoDB 服务器支持在同一 TCP 端口上侦听 TLS/SSL 加密和未加密的连接。这允许 MongoDB 集群升级以使用 TLS/SSL 加密的连接。

要从不使用 TLS/SSL 加密的 MongoDB 集群升级到使用 TLS/SSL 加密的集群,请使用以下滚动升级过程:

  • 对于集群中的每个节点,将选项--sslMode设置为allowSSL来启动节点。 --sslMode allowSSL <--sslMode>设置允许节点接受 TLS/SSL 和非 TLS /非 SSL 传入连接。它与其他服务器的连接不使用 TLS/SSL。包括其他TLS/SSL options以及您的特定配置所需的任何其他选项。

Note

从 MongoDB 3.6 开始,默认情况下mongodmongos绑定到 localhost。如果部署的成员在不同的主机上运行,或者希望远程 Client 端连接到部署,则必须指定--bind_ipnet.bindIp。有关更多信息,请参见Localhost 绑定兼容性更改

For example:

mongod --replSet <name> --sslMode allowSSL --sslPEMKeyFile <path to TLS/SSL Certificate and key PEM file> --sslCAFile <path to root CA PEM file> <additional options>

将群集的所有节点升级到这些设置。

您也可以在configuration file中指定这些选项。如果使用YAML 格式配置文件,请在文件中包括以下设置:

net:
   ssl:
      mode: <disabled|allowSSL|preferSSL|requireSSL>
      PEMKeyFile: <path to TLS/SSL certificate and key PEM file>
      CAFile: <path to root CA PEM file>
  • 切换所有 Client 端以使用 TLS/SSL。参见Client 端的 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 设置编辑configuration file,以确保在后续重新启动时,群集使用 TLS/SSL。
[1]*(12)*作为使用setParameter命令的替代方法,您还可以使用适当的 TLS/SSL 选项和值重新启动节点。