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

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

本页内容

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

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

注意

MongoDB在系统中禁用了 TLS 1.0 加密支持,因为系统中已提供 TLS 1.1+。

注意

MongoDB 提供了与 net.ssl 设置(和 --ssl 命令行选项)对应的 net.tls 设置(和 --tls 命令行选项)。新的 tls 设置与 ssl 设置具有 相同 的功能,因为 MongoDB 一直支持 TLS 1.0 及更高版本。

本节中的流程使用 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 证书和密钥的文件的路径。MongoDB 服务器/ 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. 更新 clusterAuthModesendX509。当 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 命令行选项)。新的 tls 设置与 ssl 设置具有 相同 的功能,因为 MongoDB 一直支持 TLS 1.0 及更高版本。

本节中的流程使用 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 选项)使用密钥文件但未使用TLS/SSL的集群。

对于使用密钥文件认证但未使用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](1, 2, 3, 4, 5, 6, 7) 作为使用 setParameter 命令的替代方案,您也可以使用适当的 TLS/SSL 和 x509 选项和值重新启动节点。

返回

使用 x.509