Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / /

将自管理 MongoDB 从密钥文件身份验证升级到 x。 509身份验证

在此页面上

  • 升级过程(使用 tls选项)
  • 升级过程(使用ssl选项)

要将当前使用密钥文件身份验证的集群升级到 x。 509身份验证,请使用以下滚动升级进程。

注意

MongoDB 在支持 TLS 1.1+ 的系统上禁用对 TLS 1.0 加密的支持。

注意

MongoDB 提供与 net.ssl 设置(和 --ssl 命令行选项)相对应的 net.tls 设置(和 --tls 命令行选项)。由于 MongoDB 始终支持 TLS 1.0 及更高版本,因此新的 tls 设置可提供与 ssl 设置相同的功能。

本部分中的过程使用tls设置/选项。 有关使用ssl设置/选项的过程,请参阅升级过程(使用ssl选项)。

注意

该过程使用tls设置/选项。 有关使用ssl设置/选项的过程,请参阅当前使用 TLS/SSL 的集群(使用ssl选项)。

对于使用 TLS/SSL 和密钥文件身份验证的集群,要升级到 x.509 集群身份验证,请使用以下滚动升级过程:

  1. 对于集群的每个成员,将以下设置添加到配置文件中并重新启动:

    • security.clusterAuthMode
      设置为sendKeyFile 。 使用此设置值,每个节点将继续发送其密钥文件,以验证自身的成员身份。 但是,每个节点都可以从其他节点接收密钥文件或 x.509 证书,以对这些节点进行身份验证。
    • net.tls.clusterFile
      设置为用于成员身份验证的节点证书密钥文件的相应路径。 mongod / mongos会向集群的其他成员提供此文件,以表明自己的成员身份。

    包括其他TLS/SSL 选项以及适合您的特定配置的任何其他选项。

    例如:

    net:
    tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/caToValidateReceivedCertificates.pem
    clusterFile: "/etc/ssl/myReplMembershipCertificateKeyFile.pem"
    security:
    clusterAuthMode: sendKeyFile
    keyFile: /my/securely/located/membershipkey
    replication:
    replSetName: myReplicaSet
    net:
    bindIp: localhost,mongodb0.example.net
    port: 27017
    systemLog:
    destination: file
    path: "/var/log/mongodb/mongod.log"
    logAppend: true
    storage:
    dbPath: "/var/lib/mongodb"
    processManagement:
    fork: true

    在继续之前,更新集群的所有节点以包含security.clusterAuthModenet.tls.clusterFile设置。

  2. 连接到每个节点并使用setParameter命令将clusterAuthMode更新为sendX509[1]

    db.adminCommand( { setParameter: 1, clusterAuthMode: "sendX509" } )

    使用sendX509时,每个节点都会发送其net.tls.clusterFile以验证自己的成员身份。 但是,每个节点都可以从其他节点接收密钥文件或 x.509 证书,以对这些节点进行身份验证。

    在继续之前,将集群的所有节点升级到此设置。

  3. 可选但推荐使用。 最后,对于集群的每个节点,连接到该节点并使用setParameter命令将clusterAuthMode更新为x509 ,以仅使用 x.509 证书进行身份验证。 [1]

    db.adminCommand( { setParameter: 1, clusterAuthMode: "x509" } )
  4. 升级所有节点后,使用适当的 x.509 设置编辑配置文件,以确保在后续重新启动时,集群使用 x.509 身份验证。 例如:

    net:
    tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/caToValidateReceivedCertificates.pem
    clusterFile: "/etc/ssl/myReplMembershipCertificateKeyFile.pem"
    security.clusterAuthMode: x509
    replication:
    replSetName: myReplicaSet
    net:
    bindIp: localhost,mongodb0.example.net
    port: 27017
    systemLog:
    destination: file
    path: "/var/log/mongodb/mongod.log"
    logAppend: true
    storage:
    dbPath: "/var/lib/mongodb"
    processManagement:
    fork: true

提示

另请参阅:

您也可以使用命令行选项而不是配置文件来配置 mongodmongos

注意

该过程使用tls选项。 有关使用ssl设置/选项的过程,请参阅当前未使用 TLS/SSL 的集群(使用ssl选项)。

对于使用密钥文件身份验证但未使用 TLS/SSL 的集群,要升级到 x.509 成员身份验证和 TLS/SSL 连接:

  1. 对于集群的每个成员,将以下设置添加到配置文件中并重新启动:

    • net.tls.mode
      设置为allowTLS 。 此值允许节点接受 TLS/SSL 和非 TLS/非 SSL 传入连接。 其传出连接不使用 TLS/SSL。
    • net.tls.certificateKeyFile
      设置为包含 TLS/SSL 证书和密钥的文件的路径。 mongod / mongos将此文件提供给其客户端以确定实例的身份。 使用 TLS/SSL 时必需。
    • net.tls.clusterFile
      设置为用于成员身份验证的节点证书密钥文件的相应路径。 mongod / mongos会向集群的其他成员提供此文件,以表明自己的成员身份。
    • net.tls.CAFile
      设置为包含用于验证收到证书的证书链的文件的路径。
    • security.clusterAuthMode
      设置为sendKeyFile 。 这允许每个节点继续发送其密钥文件,以验证自己的成员身份。 但是,每个节点都可以从其他节点接收密钥文件或 x.509 证书,以对这些节点进行身份验证。

    包括其他TLS/SSL 选项以及适合您的特定配置的任何其他选项。

    例如:

    net:
    tls:
    mode: allowTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
    clusterFile: "/etc/ssl/myReplMembershipCertificateKeyFile.pem"
    CAFile: /etc/ssl/caToValidateReceivedCertificates.pem
    security:
    clusterAuthMode: sendKeyFile
    keyFile: /my/securely/located/membershipkey
    replication:
    replSetName: myReplicaSet
    net:
    bindIp: localhost,mongodb0.example.net
    port: 27017
    systemLog:
    destination: file
    path: "/var/log/mongodb/mongod.log"
    logAppend: true
    storage:
    dbPath: "/var/lib/mongodb"
    processManagement:
    fork: true

    升级集群的所有节点以包含net.tls.modenet.tls.certificateKeyFilenet.tls.clusterFilesecurity.clusterAuthMode

  2. 连接到每个节点并使用setParameter命令[1]执行以下操作:

    1. tlsMode更新为preferSSL 。 将tlsMode设置为preferTLS时,该节点接受 TLS/SSL 和非 TLS/非 SSL 传入连接,并且其传出连接使用 TLS/SSL。

    2. clusterAuthMode更新为sendX509 。 将clusterAuthMode设置为sendX509后,每个节点都会发送其net.tls.clusterFile以验证自身的成员身份。 但是,每个节点继续接受来自其他节点的密钥文件或 x.509 证书,以对这些节点进行身份验证。

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

    在继续之前,将集群的所有节点升级到这些设置。

  3. 升级所有节点后,使用适当的 TLS/SSL 和 x.509 设置编辑配置文件,以确保在后续重新启动时,集群使用 x.509 身份验证。

    net:
    tls:
    mode: preferTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
    clusterFile: "/etc/ssl/myReplMembershipCertificateKeyFile.pem"
    CAFile: /etc/ssl/caToValidateReceivedCertificates.pem
    security:
    clusterAuthMode: sendX509
    replication:
    replSetName: myReplicaSet
    net:
    bindIp: localhost,mongodb0.example.net
    port: 27017
    systemLog:
    destination: file
    path: "/var/log/mongodb/mongod.log"
    logAppend: true
    storage:
    dbPath: "/var/lib/mongodb"
    processManagement:
    fork: true

    注意

    此时,

    • 集群中的节点使用 TLS/SSL 连接。 但是,节点可以接受来自客户端应用程序的非 TLS/SSL 连接。

    • 节点发送其 x.509 证书进行成员身份验证,但可以接受来自其他节点的 x.509 证书或密钥文件以验证其他节点的成员资格。

    要从客户端应用程序实施 TLS/SSL 连接并仅接受 x.509 进行成员身份验证,请参阅下一步。

  4. 可选但推荐使用。 更新所有节点以仅使用TLS/SSL连接和 x.509 证书进行成员身份验证。

    重要

    此 TLS/SSL 连接要求适用于所有连接;也就是说,与客户端以及集群成员。 也就是说,客户端必须指定 TLS/SSL 连接,并在连接到集群时提供其证书密钥文件。 有关使用 TLS/SSL 连接的更多信息,请参阅连接到需要客户端证书的 MongoDB 实例。 另请参阅仅在客户端提供证书时验证。

    net.tls.mode更新为requireTLS ,并将security.clusterAuthMode更新为x509

    例如:

    net:
    tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
    clusterFile: "/etc/ssl/myReplMembershipCertificateKeyFile.pem"
    CAFile: /etc/ssl/caToValidateReceivedCertificates.pem
    security:
    clusterAuthMode: x509
    replication:
    replSetName: myReplicaSet
    net:
    bindIp: localhost,mongodb0.example.net
    port: 27017
    systemLog:
    destination: file
    path: "/var/log/mongodb/mongod.log"
    logAppend: true
    storage:
    dbPath: "/var/lib/mongodb"
    processManagement:
    fork: true

提示

另请参阅:

您也可以使用命令行选项而不是配置文件来配置 mongodmongos

注意

MongoDB 提供与 net.ssl 设置(和 --ssl 命令行选项)相对应的 net.tls 设置(和 --tls 命令行选项)。由于 MongoDB 始终支持 TLS 1.0 及更高版本,因此新的 tls 设置可提供与 ssl 设置相同的功能。

本部分中的过程使用ssl选项。 有关使用tls选项的过程,请参阅升级过程(使用tls选项)。

注意

该过程使用ssl选项。 有关使用tls选项的过程,请参阅当前使用 TLS/SSL 的集群(使用ssl选项)。

对于使用 TLS/SSL 和密钥文件身份验证的集群,要升级到 x.509 集群身份验证,请使用以下滚动升级过程:

  1. 对于集群的每个节点,启动节点时,将选项--clusterAuthMode设置为sendKeyFile ,并将选项--sslClusterFile设置为节点证书的相应路径。 包括其他TLS/SSL 选项以及特定配置所需的任何其他选项。 例如:

    mongod --replSet <name> --sslMode requireSSL --clusterAuthMode sendKeyFile --sslClusterFile <path to membership certificate and key PEM file> --sslPEMKeyFile <path to TLS/SSL Certificate and key PEM file> --sslCAFile <path to root CA PEM file> --bind_ip localhost,<hostname(s)|ip address(es)>

    通过此设置,每个节点将继续使用其密钥文件来验证自身的成员身份。 但是,每个节点现在可以接受来自其他成员的密钥文件或 x.509 证书,以对这些成员进行身份验证。 将集群的所有节点升级到此设置。

  2. 然后,对于集群的每个节点,连接到该节点并使用setParameter命令将clusterAuthMode更新为sendX509[1]例如,

    db.adminCommand( { setParameter: 1, clusterAuthMode: "sendX509" } )

    通过此设置,每个节点都使用其 x。 509证书(在上一步中使用--sslClusterFile选项指定),用于验证自身的成员身份。 但是,每个节点仍会接受密钥文件或 x. 509证书来验证这些成员的身份。 将集群的所有节点升级到此设置。

  3. 可选但推荐使用。 最后,对于集群的每个节点,连接到该节点并使用setParameter命令将clusterAuthMode更新为x509 ,以仅使用 x.509 证书进行身份验证。 [1]例如:

    db.adminCommand( { setParameter: 1, clusterAuthMode: "x509" } )
  4. 升级所有节点后,使用适当的 x.509 设置编辑配置文件,以确保在后续重新启动时,集群使用 x.509 身份验证。

有关各种模式及其说明,请参阅--clusterAuthMode

注意

该过程使用ssl选项。 有关使用tls选项的过程,请参阅使用密钥文件而不是 TLS/SSL 更新(使用tls选项)集群。

对于使用密钥文件身份验证但未使用 TLS/SSL 的集群,要升级到 x.509 身份验证,请使用以下滚动升级过程:

  1. 对于集群的每个节点,启动节点时,将选项--sslMode设置为allowSSL ,将选项--clusterAuthMode设置为sendKeyFile ,并将选项--sslClusterFile设置为节点证书的相应路径。 包括其他TLS/SSL 选项以及特定配置所需的任何其他选项。 例如:

    mongod --replSet <name> --sslMode allowSSL --clusterAuthMode sendKeyFile --sslClusterFile <path to membership certificate and key PEM file> --sslPEMKeyFile <path to TLS/SSL certificate and key PEM file> --sslCAFile <path to root CA PEM file> --bind_ip localhost,<hostname(s)|ip address(es)>

    --sslMode allowSSL设置允许节点接受 TLS/SSL 和非 TLS/非 SSL 传入连接。 节点的传出连接不使用 TLS/SSL。

    --clusterAuthMode sendKeyFile设置允许每个节点继续使用其密钥文件来验证自身的成员身份。 但是,每个节点现在可以接受来自其他成员的密钥文件或 x.509 证书,以对这些成员进行身份验证。

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

  2. 然后,对于集群的每个节点,连接到该节点并使用setParameter命令将sslMode更新为preferSSL ,并将clusterAuthMode更新为sendX509[1]例如:

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

    sslMode设置为preferSSL时,该节点接受 TLS/SSL 和非 TLS/非 SSL 传入连接,并且其传出连接使用 TLS/SSL。

    clusterAuthMode设置为sendX509时,每个节点都使用其 x。 509证书(在上一步中使用--sslClusterFile选项指定),用于将自身验证为成员。 但是,每个节点仍会接受密钥文件或 x. 509证书来验证这些成员的身份。

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

  3. 可选但推荐使用。 最后,对于集群的每个节点,连接到该节点并使用setParameter命令将sslMode更新为requireSSL ,并将clusterAuthMode更新为x509[1]例如:

    db.adminCommand( { setParameter: 1, sslMode: "requireSSL", clusterAuthMode: "x509" } )

    sslMode设置为requireSSL时,节点仅使用 TLS/SSL 连接。

    clusterAuthMode设置为x509时,节点仅使用 x.509 证书进行身份验证。

  4. 升级所有节点后,使用适当的 TLS/SSL 和 x.509 设置编辑配置文件,以确保在后续重新启动时,集群使用 x.509 身份验证。

有关各种模式及其说明,请参阅--clusterAuthMode

[1]1234567作为使用setParameter命令的替代方法,您还可以使用适当的 TLS/SSL 和 x509 选项和值重新启动节点。

后退

使用 x。 509