文档菜单
文档首页
/
MongoDB 手册
/ / /

将集群升级以使用 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/SSL、PKI(公钥基础设施)证书和证书颁发机构的全貌超出了本文档的范围。本页假设用户已了解TLS/SSL,并且可以访问有效的证书。

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

注意

本节中的步骤使用tls设置/选项。有关使用它们的ssl别名的步骤,请参阅步骤(使用ssl设置).

由于MongoDB始终支持TLS 1.0及以后版本,因此tls设置/选项提供与ssl选项相同的**功能**。

  1. 对于集群中的每个节点,使用命令行选项--tlsMode或配置文件选项net.tls.mode设置为allowTLS。该allowTLS设置允许节点接受TLS/SSL和非TLS/非SSL的传入连接。它与其他服务器的连接不使用TLS/SSL。包括其他TLS/SSL选项以及您特定配置所需的任何其他选项。

    注意

    mongodmongos默认绑定到localhost。如果您的部署成员在不同的主机上运行,或者您希望远程客户端连接到您的部署,您必须指定--bind_ipnet.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>

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

  2. 将所有客户端切换到使用TLS/SSL。请参阅客户端的TLS/SSL配置

  3. 对于集群中的每个节点,使用setParameter命令将tlsMode更新为preferTLS[1] 当使用preferTLS作为其net.tls.mode时,节点接受TLS/SSL和非TLS/非SSL的入站连接,并且其与其他服务器的连接使用TLS/SSL。例如

    db.adminCommand( { setParameter: 1, tlsMode: "preferTLS" } )

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

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

  4. 对于集群中的每个节点,使用setParameter命令将tlsMode更新为requireTLS[1] 当使用requireTLS作为其net.tls.mode时,节点将拒绝任何非TLS/非SSL连接。例如

    db.adminCommand( { setParameter: 1, tlsMode: "requireTLS" } )
  5. 在升级所有节点后,编辑配置文件并设置适当的TLS/SSL设置,以确保在后续重启时,集群使用TLS/SSL。

重要

关于TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的全貌超出了本文档的范围。本页假设用户已了解TLS/SSL,并且可以访问有效的证书。

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

注意

本节中的过程使用ssl设置/选项。有关使用其tls别名的过程,请参阅过程(使用tls设置)。

由于MongoDB始终支持TLS 1.0及以后版本,因此tls设置/选项提供与ssl选项相同的**功能**。

  1. 对于集群中的每个节点,启动节点时使用命令行选项--sslMode或配置文件选项net.ssl.mode设置为allowSSLallowSSL设置允许节点接受TLS/SSL和非TLS/非SSL的入站连接。其与其他服务器的连接不使用TLS/SSL。包括其他TLS/SSL选项 [2]以及任何其他特定配置所需的其他选项。

    注意

    mongodmongos默认绑定到localhost。如果您的部署成员在不同的主机上运行,或者您希望远程客户端连接到您的部署,您必须指定--bind_ipnet.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>

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

  2. 将所有客户端切换到使用TLS/SSL。请参阅客户端的TLS/SSL配置

  3. 对于集群中的每个节点,使用setParameter命令来更新sslModepreferSSL[1]preferSSL作为其net.ssl.mode时,节点接受TLS/SSL和非TLS/非SSL的入站连接,并且与其他服务器的连接使用TLS/SSL。例如

    db.adminCommand( { setParameter: 1, sslMode: "preferSSL" } )

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

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

  4. 对于集群中的每个节点,使用setParameter命令来更新sslModerequireSSL[1]requireSSL作为其net.ssl.mode时,节点拒绝任何非TLS/非SSL连接。例如

    db.adminCommand( { setParameter: 1, sslMode: "requireSSL" } )
  5. 在升级所有节点后,编辑配置文件并设置适当的TLS/SSL设置,以确保在后续重启时,集群使用TLS/SSL。

[1](1, 2, 3, 4) 作为使用setParameter命令的替代方案,您也可以使用适当的TLS/SSL选项和值重新启动节点。
[2](1, 2) 您可以使用Windows和macOS的系统SSL证书存储。要使用系统SSL证书存储,请使用
  • net.tls.certificateSelector(或命令行选项--tlsCertificateSelector)代替net.tls.certificateKeyFile(或命令行选项`--certificateKeyFile`)。
  • net.ssl.certificateSelector(或命令行选项--sslCertificateSelector)代替net.ssl.PEMKeyFile(或命令行选项`--sslPEMKeyFile`)。
使用系统SSL证书存储时,OCSP(在线证书状态协议)用于验证证书的撤销状态。

返回

配置客户端