Docs 菜单

在自管理集群上轮换没有 clusterAuthX509 属性的 X.509 证书

副本集或分片集群的成员可以使用 X.509 证书进行成员身份验证,以识别同一部署中的其他服务器。本教程介绍如何执行滚动更新,在不使用509 net.tls.clusterAuthX509设置配置标识名 (DN) 属性的集群上轮换 X. 证书。

注意

要执行滚动更新以轮换使用net.tls.clusterAuthX509 设置的集群或更新后将使用这些设置的集群上的证书,请参阅轮换 X.509 509在自管理集群上具有 clusterAuthX 属性的证书。

当服务器节点收到连接请求时,它会将所提供证书的 subject字段中的标识名 (DN) 属性与其自身证书的主题 DN 属性进行比较。 如果证书的主题包含相同的组织 (O)、组织单位 (OU) 和域组件 (DC) 属性值,则证书匹配。 服务器的配置文件还可以指定备用 DN 属性,用于在tlsX509ClusterAuthDNOverride 参数中进行匹配。如果服务器的主题 DN 属性或配置的 值与所提供证书的主题 DNtlsX509ClusterAuthDNOverride 属性匹配,则服务器节点会将该连接视为集群成员。

在某些情况下,您可能需要将成员证书更新为具有新的主题标识名 (DN) 属性的新证书,例如,如果组织更改了名称。 在 滚动更新中,一次更新一个成员证书,并且您的部署不会导致任何停机。

在证书轮换过程中,采用新证书的集群可以使用tlsX509ClusterAuthDNOverride 509参数接受具有不同主题 DN 属性的 x. 证书。一旦所有成员都使用具有新值的证书,删除覆盖以开始拒绝现已过期的证书。

考虑一个副本集,其中每个成员的 X.509 证书(使用clusterFilecertificateKeyFile 设置)的主题 DN 属性为"OU=10gen Server,O=10gen"

此副本集的成员具有以下配置文件:

net.tls.mode: requireTLS
net.tls.certificateKeyFile: "./mycerts/10gen-server1.pem"
net.tls.CAFile: "./mycerts/ca.pem"
security.clusterAuthMode: x509
net.tls.clusterFile: "./mycerts/10gen-cluster1.pem"
net.tls.clusterCAFile: "./mycerts/ca.pem"

以下过程将每个成员的证书更新为主题 DN 属性为 "OU=MongoDB Server, O=MongoDB" 的新证书。

注意

以下过程假定新的 X.509 证书满足成员资格证书和所有其他要求,并且集群配置使用标识名 (DN) 值标识对等证书。有关详细信息,请参阅成员证书要求。

1

在滚动更新期间,成员一次会使用新配置重新启动。 要允许具有旧主题 DN 属性的服务器节点将具有新主题 DN 属性的节点标识为集群成员,设立在所有运行节点上将覆盖参数设置为新主题 DN 属性。

为此,请修改每个服务器的配置文件,将 参数设立为使用新证书的主题 DNtlsX509ClusterAuthDNOverride 属性:

net.tls.mode: requireTLS
net.tls.certificateKeyFile: "./mycerts/10gen-server1.pem"
net.tls.CAFile: "./mycerts/ca.pem"
security.clusterAuthMode: x509
net.tls.clusterFile: "./mycerts/10gen-cluster1.pem"
net.tls.clusterCAFile: "./mycerts/ca.pem"
setParameter:
tlsX509ClusterAuthDNOverride: "OU=MongoDB Server,O=MongoDB"

在重新启动每个成员之前,不会考虑此配置。

2

要对所有成员执行滚动重启,请重启每个从节点(secondary node from replica set),然后重启主节点 (primary node in the replica set)。

对于每个从节点(secondary node mongoshfrom replica set),将 连接到该节点,然后:

  1. 使用db.shutdownServer()方法关闭成员:

    use admin
    db.shutdownServer()
  2. 重新启动成员。

    在重新启动下一个从从节点(secondary node from replica set)之前,请确保该节点已达到SECONDARY 状态。要确定成员状态,运行rs.status() 并读取stateStr 字段的值。

    rs.status().members

对于主节点 (primary node mongoshin the replica set)节点,将 连接到该节点,然后:

  1. 使用rs.stepDown()降级该节点:

    rs.stepDown()
  2. 使用db.shutdownServer()方法关闭成员:

    use admin
    db.shutdownServer()
  3. 重新启动成员。

副本集集中的所有服务器现在都可以使用覆盖参数接受来自使用具有新主题 DN 属性的证书的成员的对等连接。

3

更新每个服务器的配置文件:

例如:

net.tls.mode: requireTLS
net.tls.certificateKeyFile: "./mycerts/mongodb-server1.pem"
net.tls.CAFile: "./mycerts/ca.pem"
security.clusterAuthMode: x509
net.tls.clusterFile: "./mycerts/mongodb-cluster1.pem"
net.tls.clusterCAFile: "./mycerts/ca.pem"
setParameter:
tlsX509ClusterAuthDNOverride: "OU=10Gen Server,O=10Gen"

在重新启动每个成员之前,不会考虑此配置。

4

应用更新后的配置应用于每个成员,请重复从步骤 2 开始的过程,以滚动重启服务器节点。

在此进程中,使用新证书重新启动的节点将使用 中存储的旧 DNtlsX509ClusterAuthDNOverride 属性来识别提供旧证书的节点。仍具有旧证书的节点将使用存储在 中的新 DNtlsX509ClusterAuthDNOverride 来识别提供新证书的节点。

5

要防止更新的服务器节点将提供旧证书的客户端视为对等节点,请从所有服务器节点配置文件中删除tlsX509ClusterAuthDNOverride 参数。

例如:

net.tls.mode: requireTLS
net.tls.certificateKeyFile: "./mycerts/mongodb-server1.pem"
net.tls.CAFile: "./mycerts/ca.pem"
security.clusterAuthMode: x509
net.tls.clusterFile: "./mycerts/mongodb-cluster1.pem"
net.tls.clusterCAFile: "./mycerts/ca.pem"

在重新启动每个成员之前,不会考虑此配置。

6

应用更新后的配置应用于每个成员,请重复从步骤 2 开始的过程,以滚动重启服务器节点。

副本集集中的所有服务器现在仅接受来自使用具有新主题 DN 属性的证书的成员的对等连接。