包含新 DN 的 x.509 集群证书的滚动更新
副本集或分片集群的成员可以使用 x.509 certificates for membership authentication,以将彼此识别为同一部署的成员。
要将彼此识别为同一部署的成员,证书中的组织属性 (O)、组织单位属性 (OU) 和域组件 (DC) 必须匹配。
在某些情况下,您可能需要将成员证书更新为具有新可分辨名称 (DN) 的新证书,例如组织更改其名称时。 从 version 4.2 开始,MongoDB 提供了一个新的 tlsX509ClusterAuthDNOverride 参数来设置用于匹配的替代 DN。 使用此参数,您可以将证书滚动更新为具有不同 DN 的新证书。
以下教程描述了在不停机的情况下更新副本集证书的过程。
考虑一个副本集,其中每个成员的证书(clusterFile 和 certificateKeyFile)的 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"
以下过程将成员的证书(clusterFile 和 certificateKeyFile)更新为 DN 值为“OU=MongoDB Server,O=MongoDB”的新证书。
[NOTE]注意
以下过程假定新的 x.509 证书满足成员证书的所有其他要求。 详情请见Member Certificate Requirements
步骤
0. 可选。 在运行成员上设置覆盖参数
该过程要求重新启动部署的所有成员。 由于在您重新启动所有成员之前不会考虑这些设置,因此您的实例可能会记录消息,直到该过程完成。
为避免出现这些消息,您可以在运行成员上设置覆盖参数。
将 mongosh 直接连接到部署的每个成员并将 tlsX509ClusterAuthDNOverride 参数设置为新证书 DN:
db.adminCommand( { setParameter: 1, tlsX509ClusterAuthDNOverride: "OU=MongoDB Server,O=MongoDB" } )
修改所有成员的配置
修改每个成员的配置:
将
net.tls.certificateKeyFile更新为新证书。将
net.tls.clusterFile更新为新证书。将
tlsX509ClusterAuthDNOverride参数设置为新的证书 DN。例如:
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=MongoDB Server,O=MongoDB"在您重新启动每个成员之前,这些设置不会被考虑在内(请参阅下一步)。
重启每个成员
修改所有成员的配置后,重新启动每个辅助节点,然后重新启动主节点。
对于每个次要成员,将
mongosh连接到该成员并:使用
db.shutdownServer()方法关闭成员:use admin db.shutdownServer()重新启动成员。
在重新启动下一个辅助节点之前,确保该成员已达到 SECONDARY 状态。
对于主要的,将
mongosh连接到成员,然后使用
rs.stepDown()降级成员:rs.stepDown()使用
db.shutdownServer()方法关闭成员:use admin db.shutdownServer()重新启动成员。
删除
tlsX509ClusterAuthDNOverride设置使用新证书重新启动所有成员后,您可以从配置中删除
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"在您重新启动每个成员之前,这些设置不会被考虑在内。
参见
原文 - Rolling Update of x.509 Cluster Certificates that Contain New DN
译者:景圣