适用场景
- 产品:ZStack Cloud的双管理节点(MN)HA 部署
- 版本:ZStack Cloud 版本
- 组件:管理节点 UI、
zsha2、Java keytool、openssl - 触发条件:需要将平台的 HTTPS 证书(更换平台 https 证书)替换为客户提供的证书
问题现象
- 客户需要替换平台的 HTTPS 证书。
- 默认的浏览器 / API 客户端仍提示原始的自签名证书告警。
判断方法
- 确认客户提供的证书为
.pfx/.p12文件,且其对应的私钥可用。 - 确认环境健康,且无其他维护任务在运行。
- 确认新的 HTTPS 监听端口(ZStack 管理 UI 启用 SSL 时默认为
5443)从用户网络可达。
原因说明
ZStack 管理节点将其 HTTPS 证书嵌入到 PKCS12 密钥库中,并由 zstack.properties(consoleProxyCertFile)引用。要替换证书,需要先将客户提供的 PFX 重新编码为 ZStack 期望的密钥库格式,再通过 zstack-ctl config_ui 进行注册。必须同时更新两个管理节点,避免 VIP 故障切换到仍持有旧证书的节点。
解决方案
1. 执行前准备
- 确认环境健康;关闭云主机全局高可用;在两个 MN 上分别备份 ZStack MySQL 数据库;停止管理节点服务。
- 准备证书文件:
9-15.p12(客户提供)及其对应的私钥(例如xxxx.key)。 - 确认 Java
keytool可用。例如:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/bin/keytool
在目标 MN 上请根据实际 JDK 安装路径调整。
2. 处理步骤
- 将证书导入浏览器(可选的健康检查步骤),并重新导出为 P12。
- 将
.pfx文件导入浏览器的证书存储,再导出为.p12。
- 从客户的 P12 生成 PEM。
openssl pkcs12 -in 9-15.p12 -out 9-15.pem -nodes
- 确认环境健康;关闭高可用;备份数据库;停止 MN 服务。
- 在每个 MN 上:备份 MySQL,然后执行
zsha2 stop-node。
- 将客户证书和私钥重新打包为新的 PKCS12。
openssl pkcs12 -export -in 9-15.pem -inkey xxxx.key -out test.p12
按提示设置密码,并记住该密码(后续步骤需要使用)。
- 将新的 PKCS12 再转换回 PEM(便于 keytool 处理)。
openssl pkcs12 -in test.p12 -out test.pem -nodes
- 查询新 PKCS12 中的证书别名。
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/bin/keytool \
-list -v -keystore /root/Keystore_Tomcat/test.p12
- 向管理节点注册新证书。
zstack-ctl config_ui \
--enable-ssl True \
--ssl-keyalias=1 \
--ssl-keystore=/xxxx/xxx/test.p12 \
--ssl-keystore-type=PKCS12 \
--ssl-keystore-password=<第 4 步设置的密码> \
--server-port=5443
请将 --ssl-keyalias、--ssl-keystore、--ssl-keystore-password 替换为实际值。
- 将新的 keystore 和 PEM 拷贝到默认的 ZStack UI 目录。
cp test.p* /usr/local/zstack/zstack-ui/
- 将
consoleProxyCertFile指向新 PEM 的绝对路径。
- 编辑
/usr/local/zstack/apache-tomcat/webapps/zstack/WEB-INF/classes/zstack.properties:
consoleProxyCertFile = /usr/local/zstack/zstack-ui/test.pem
- 在第二个管理节点上重复步骤 1–9。
- 两台 MN 必须都持有新证书,以确保 VIP 故障切换时不会切换到旧证书。
- 启动管理节点服务。
zsha2 start-node
- 在主域名和子域名上分别验证控制台访问。
- 通过主域名登录;打开云主机控制台;再切换到子域名重复验证。
验证方法
- 浏览器在主域名和子域名上都展示新的 HTTPS 证书(颁发者与客户提供的 CA 一致)。
- 在两个域名上都可以成功打开云主机控制台。
zsha2 status显示两台 MN 均健康,HA 状态正常。- 验证通过后,在 UI 中重新开启全局云主机高可用。
风险与回滚
- 风险: 错误的 keystore 密码或别名会导致管理 UI 无法启动,直至证书被修复前平台都无法登录。
- 风险: 若未在两台 MN 上都完成更新,VIP 持有者会持有新证书、备节点仍持有旧证书;在维护窗口内一旦发生 VIP 切换,就会对外暴露旧证书。
- 回滚: 恢复原来的
.p12/.pem,使用旧值重新运行zstack-ctl config_ui;将zstack.properties中的consoleProxyCertFile恢复到原路径;重启 MN 服务。
