旋转X.509证书以在自托管集群上使用扩展值
新版本7.0.
集群成员可以使用X.509证书进行成员身份验证以识别同一部署中的其他服务器。
当服务器收到连接请求时,它会将证书的区分名称(DN)值或扩展值字符串与clusterAuthX509设置和tlsClusterAuthX509Override参数的配置值进行比较。如果值匹配,则将连接视为集群成员。
采用新证书的集群可以使用tlsClusterAuthX509Override参数,在证书轮换过程中从使用DN属性标识的证书迁移到使用扩展值标识的证书。
一旦所有成员都使用具有新值的证书,请删除覆盖以开始拒绝现在过期的证书。
关于此任务
考虑一个副本集,其中成员证书(使用 clusterFile 和 certificateKeyFile 设置)的区分名称(DN)值使用 MongoDB 组织和 MongoDB Server 组织单元(使用 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证书满足成员证书和其他所有要求,并且集群配置使用扩展值识别对等证书。
有关详细信息,请参阅成员证书要求。
步骤
以下步骤更新成员证书,在配置了 attributes 设置的集群上使用新的X.509证书。
最初,集群使用DN值识别成员。使用新的证书后,服务器将使用 mongodb://example.mongodb.net 扩展值识别成员,并忽略证书属性。
更新TLS集群成员配置
更新每个服务器的配置文件
将
clusterAuthX509设置更改为匹配新证书,通过将attributes设置替换为extensionValue设置。将
tlsClusterAuthX509Override参数设置为使用旧证书的 DN 属性。
例如
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 }
重启辅助集群成员
重启每个辅助集群成员
使用
mongosh连接到每个辅助集群成员,然后使用db.shutdownServer()方法停止服务器use admin db.shutdownServer() 重启服务器。
使用
rs.status()方法确定成员状态rs.status().members 等待该成员的
stateStr字段显示为SECONDARY,然后重启下一个辅助。
副本集的辅助服务器现在接受使用具有新扩展值的证书以及旧 DN 属性的成员的连接。
重启主集群成员
重启主成员
使用
mongosh连接到主成员,然后使用rs.stepDown()方法将成员降级为主rs.stepDown() 集群将具有新证书的辅助提升为新的主成员。
使用
db.shutdownServer()方法关闭服务器use admin db.shutdownServer() 重启服务器。
副本集的主服务器降级并重启为辅助,现在它接受使用具有新扩展值的证书以及旧 DN 属性的成员的连接。
更新TLS证书
更新每个服务器的配置文件
将
net.tls.certificateKeyFile设置更改为使用新的证书。将
net.tls.clusterFile设置更改为使用新的证书。
例如
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 }
重启副本集的次要成员
重启每个辅助集群成员
使用
mongosh连接到每个次要集群成员,然后使用db.shutdownServer()方法停止服务器use admin db.shutdownServer() 重启服务器。
使用
rs.status()方法确定成员状态rs.status().members 等待该成员的
stateStr字段显示为SECONDARY,然后重启下一个辅助。
副本集中的次要服务器现在使用新的X.509证书。
重启主集群成员
重启主成员
使用
mongosh连接到主成员,然后使用rs.stepDown()方法将成员降级为主rs.stepDown() 集群将具有新证书的辅助提升为新的主成员。
使用
db.shutdownServer()方法关闭服务器use admin db.shutdownServer() 重启服务器。
副本集中的主服务器降级并重新启动,作为使用新X.509证书的次要服务器。
移除DN证书覆盖配置
由于集群中所有成员现在都使用新的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
这确保了服务器在启动时不会配置旧的证书设置。
重启辅助集群成员
重启每个辅助集群成员
使用
mongosh连接到每个次要集群成员,然后使用db.shutdownServer()方法停止服务器use admin db.shutdownServer() 重启服务器。
使用
rs.status()方法确定成员状态rs.status().members 等待该成员的
stateStr字段显示为SECONDARY,然后重启下一个辅助。
副本集中的辅助服务器重启,不再接受来自旧X.509证书的连接。
重启主集群成员
重启主成员
使用
mongosh连接到主成员,然后使用rs.stepDown()方法将成员降级为主rs.stepDown() 集群将具有新证书的辅助提升为新的主成员。
使用
db.shutdownServer()方法关闭服务器use admin db.shutdownServer() 重启服务器。
主服务器降级并重启为辅助服务器,不再接受来自旧X.509证书的连接。