ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs 菜单

轮换 X. 509证书以在自管理集群上使用扩展值

7.0 版本中的新增功能

集群成员可以使用 X.509 证书 进行成员身份验证,以识别同一部署中的其他服务器。本教程介绍如何执行滚动更新,从使用证书标识名 (DN) 属性迁移到使用扩展值来标识集群成员。

当配置了net.tls.clusterAuthX509.extensionValue 设置的服务器收到连接请求时,它会将所提供证书的扩展值字符串与extensionValue 设置和tlsClusterAuthX509Override 参数的配置值进行比较。如果值匹配,则会将该连接视为集群成员。

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

考虑一个副本集,其中使用clusterFilecertificateKeyFile 设置的成员证书具有使用MongoDB 组织和MongoDB Server 组织单位的标识名 (DN) 属性。这些 DN 属性是使用net.tls.clusterAuthX509.attributes 设置设立的。

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

注意

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

这些步骤会更新成员证书,以便在配置有attributes设置的集群上使用新的 X.509 证书。

最初,集群使用标识名值识别成员。使用新证书时,服务器会使用mongodb://example.mongodb.net扩展值来识别成员,并忽略证书属性。

1

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

例如:

net:
tls:
mode: requireTLS
certificateKeyFile: /etc/mycerts/mongodb-server1.pem
CAFile: /etc/mycerts/ca.pem
clusterFile: /etc/mycerts/mongodb-cluster1.pem
clusterCAFile: /etc/mycerts/ca.pem
clusterAuthX509:
extensionValue: mongodb://example.mongodb.net
security:
clusterAuthMode: x509
setParameter:
tlsClusterAuthX509Override: { attributes: O=MongoDB, OU=MongoDBServer }
2

重新启动每个从节点集群成员:

  1. 使用mongosh连接到每个从节点集群成员,然后使用db.shutdownServer()方法停止服务器:

    use admin
    db.shutdownServer()
  2. 重新启动服务器。

  3. 使用rs.status()方法确定成员状态:

    rs.status().members
  4. 等待该成员的stateStr字段显示值SECONDARY ,然后重新启动下一个从节点。

副本集中的从节点服务器现在接受来自使用具有新扩展值和旧标识名属性的证书的成员的对等互连连接。

3

重新启动主节点:

  1. 使用mongosh连接到主节点,然后使用rs.stepDown()方法将该成员从主节点降级:

    rs.stepDown()

    集群将使用新证书的从节点提升为新的主节点。

  2. 使用db.shutdownServer()方法关闭服务器:

    use admin
    db.shutdownServer()
  3. 重新启动服务器。

副本集中的主服务器降级并作为从节点重新启动,现在接受来自使用具有新扩展值和旧标识名属性的证书的成员的对等互连连接。

4

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

例如:

net:
tls:
mode: requireTLS
certificateKeyFile: /etc/mycerts/mongodb-server2.pem
CAFile: /etc/mycerts/ca.pem
clusterFile: /etc/mycerts/mongodb-cluster2.pem
clusterCAFile: /etc/mycerts/ca.pem
clusterAuthX509:
extensionValue: mongodb://example.mongodb.net
security:
clusterAuthMode: x509
setParameter:
tlsClusterAuthX509Override: { attributes: O=MongoDB, OU=MongoDB Server }
5

重新启动每个从节点集群成员:

  1. 使用mongosh连接到每个从节点集群成员,然后使用db.shutdownServer()方法停止服务器:

    use admin
    db.shutdownServer()
  2. 重新启动服务器。

  3. 使用rs.status()方法确定成员状态:

    rs.status().members
  4. 等待该成员的stateStr字段显示值SECONDARY ,然后重新启动下一个从节点。

副本集中的从节点服务器现在使用新的 X.509 证书。

6

重新启动主节点:

  1. 使用mongosh连接到主节点,然后使用rs.stepDown()方法将该成员从主节点降级:

    rs.stepDown()

    集群将使用新证书的从节点提升为新的主节点。

  2. 使用db.shutdownServer()方法关闭服务器:

    use admin
    db.shutdownServer()
  3. 重新启动服务器。

副本集中的主服务器降级并作为使用新 X.509 证书的从节点重新启动。

7

现在,集群的所有节点都使用新的 X.509 证书,更新配置文件以删除 参数的setParameter tlsClusterAuthX509Override设置。

例如:

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

这可确保服务器在初创企业不会配置旧证书设置。

8

重新启动每个从节点集群成员:

  1. 使用mongosh连接到每个从节点集群成员,然后使用db.shutdownServer()方法停止服务器:

    use admin
    db.shutdownServer()
  2. 重新启动服务器。

  3. 使用rs.status()方法确定成员状态:

    rs.status().members
  4. 等待该成员的stateStr字段显示值SECONDARY ,然后重新启动下一个从节点。

副本集中的服务器会重新启动,并不再接受来自旧 X.509 证书的连接。

9

重新启动主节点:

  1. 使用mongosh连接到主节点,然后使用rs.stepDown()方法将该成员从主节点降级:

    rs.stepDown()

    集群将使用新证书的从节点提升为新的主节点。

  2. 使用db.shutdownServer()方法关闭服务器:

    use admin
    db.shutdownServer()
  3. 重新启动服务器。

主服务器降级并作为从节点重新启动,不再接受来自旧 X.509 证书的连接。