在自托管集群上旋转 X.509 证书
新在版本7.0.
集群成员可以使用 X.509 证书进行成员身份验证以识别同一部署中的其他服务器。
当服务器收到连接请求时,它会将证书的区分名称(DN)值或扩展值字符串与clusterAuthX509
设置和tlsClusterAuthX509Override
参数的配置值进行比较。如果值匹配,它将连接视为集群成员。
采用新证书的集群可以使用tlsClusterAuthX509Override
参数在证书轮换过程中接受具有不同DN属性的X.509证书。一旦所有成员都使用具有新值的证书,请删除覆盖以开始拒绝现在过期的证书。
注意
要在一个不使用net.tls.clusterAuthX509
设置且更新后也不会使用的集群上执行滚动更新以轮换证书,请参阅在自管理的集群上滚动更新包含新DN的x.509证书。
关于此任务
考虑一个副本集,其中成员证书(使用clusterFile
和certificateKeyFile
设置设置)的区分名称(DN)值使用10gen
组织和10gen 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=10gen, OU=10gen Server
本教程假定新X.509证书符合成员证书要求以及所有其他要求,并且集群配置使用区分名称(DN)值来识别对等证书。
有关详细信息,请参阅成员证书要求。
步骤
以下步骤将成员证书更新为使用配置了attributes设置的集群上的新X.509证书。
新证书具有区分名称(DN),将组织(O)属性从10gen
更改为MongoDB
,并将组织单元(OU)属性从10gen Server
更改为MongoDB Server
。
更新TLS集群成员配置
更新每个服务器的配置文件
将attributes设置更改为使用新证书上的值
将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: attributes: O=MongoDB, OU=MongoDB Server security: clusterAuthMode: x509 setParameter: tlsClusterAuthX509Override: { attributes: O=10gen, OU=10gen Server }
重启二级集群成员
重启每个二级集群成员
使用
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: attributes: O=MongoDB, OU=MongoDB Server security: clusterAuthMode: x509 setParameter: tlsClusterAuthX509Override: { attributes: O=10gen, OU=10gen 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: attributes: O=MongoDB, OU=MongoDB Server 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证书的连接。