☰
vSphere证书更新与续订实战:从过期故障到自动化管理
2026/10/17 18:51:37 网站建设 项目流程

简介:本资源聚焦vSphere环境证书更新与续订这一运维难点,面向虚拟化管理员、系统工程师及需要维护vCenter证书体系的运维人员,帮助解决证书过期、SSO配置异常及更新失败等常见问题。包内共183个文件,以96个yaml配置、56个json清单、29个Python脚本为主,另有少量占位文件,压缩包约1.29MB,涵盖checksys.py、fixsts.sh、lsdoctor、vCertTool等工具的配套内容,可用于检查系统状态、修正SSO问题、诊断vCenter健康度及执行证书替换。资源同时整理了更新前备份、兼容性检查、维护窗口规划、更新后验证与长期维护等注意事项,便于读者按官方最佳实践梳理操作流程。目前已有530人学习下载,适合希望系统掌握证书续订思路、对照工具脚本排查问题的中高级运维人员参考。

1. 一次 vCenter 证书过期引发的连锁反应:为什么这份案例值得细读

凌晨两点被电话叫醒,说 vSphere 管理界面登不上去,虚拟机还能跑但所有管理操作全部失效——这是我第一次真正意识到 vSphere 环境证书更新这件事有多要命。很多人以为证书续订就是点几下按钮,实际上从 vCenter Server 到 ESXi 主机,从 Machine SSL 证书到 Solution User 证书,再到 STS 签名证书,每一类都有独立的有效期和更新路径,任何一环过期都可能让整个管理平面瘫痪。这份案例资料围绕 vSphere 环境证书更新与续订展开,覆盖了实际运维中最常遇到的几种证书过期场景,给出了可复现的操作步骤和注意事项。它适合正在维护 vSphere 环境、被证书到期告警困扰、或者想提前做好证书生命周期管理的运维工程师。如果你手上管着几套 vSphere 集群,这份东西值得认真过一遍。

2. 先搞清楚 vSphere 里到底有几种证书:分类、有效期与检查方法

2.1 证书类型拆解:Machine SSL、Solution User 与 STS 签名证书

vSphere 环境里的证书不是一张通吃,常见的有三大类。第一类是 Machine SSL 证书,装在 vCenter Server 和 ESXi 主机上,用于服务之间的 TLS 通信,比如你通过浏览器访问 vSphere Client 时走的就是这张证书。第二类是 Solution User 证书,vCenter 内部有多个解决方案用户(如 vpxd、vpxd-svcs、sts 等),每个用户有自己的证书用于服务间认证。第三类是 STS 签名证书,负责安全令牌服务的签名和验证,一旦过期,SSO 域内所有认证都会失败。

这三类证书的默认有效期不同。Machine SSL 证书默认两年,Solution User 证书默认两年,STS 签名证书默认一年半左右。但实际环境中,很多证书在部署时被替换成了内部 CA 签发的证书,有效期可能更短。更麻烦的是,vSphere 6.x 和 7.x 在证书管理机制上有差异,6.x 更多依赖命令行工具,7.x 在 vSphere Client 里集成了部分证书管理功能,但底层逻辑没变。

常见做法是先用一条命令把所有证书的到期时间拉出来看一遍,做到心里有数。在 vCenter Server Appliance 的 Shell 里执行:

# 查看当前 vCenter 所有证书的到期状态 for store in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo "=== Store: $store ===" /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store "$store" --text | grep -E "Alias|Not After" done

这段脚本遍历 vCenter 上所有证书存储区,输出每个证书的别名和到期时间。vecs-cli store list列出所有证书库,常见的包括 MACHINE_SSL_CERT、TRUSTED_ROOTS、vpxd、vpxd-extension 等。entry list --store指定具体库并列出条目,--text让输出可读。执行后你会看到类似Not After : Mar 15 08:22:31 2025 GMT的行,这就是到期时间。如果发现某张证书的 Not After 已经过了或者只剩几天,那就是需要立即处理的。

注意:在 vSphere 6.5 之前的版本中,vecs-cli 的路径和参数略有不同,如果提示命令不存在,先确认 vCenter 版本和 Shell 环境。

2.2 用 vSphere Client 和命令行双重确认证书状态

命令行能拿到精确数据,但日常巡检更习惯从 vSphere Client 里看。登录 vSphere Client 后,进入「系统管理」→「证书」→「证书管理」,这里会列出 Machine SSL 证书和 Solution User 证书的状态。如果证书即将过期,界面会有黄色或红色告警。但要注意,Client 界面有时候刷新不及时,尤其是 STS 签名证书的状态不一定在这里完整展示。

我一般会双管齐下:先在 Client 里扫一眼有没有明显告警,再 SSH 到 vCenter 跑一遍上面的脚本确认。另外,ESXi 主机的证书状态需要单独检查,在 ESXi Shell 里执行:

# 查看 ESXi 主机当前证书到期时间 openssl x509 -in /etc/vmware/ssl/rui.crt -noout -dates

rui.crt是 ESXi 主机对外提供服务的证书文件,-noout -dates只输出生效和到期时间。如果这台 ESXi 已经加入 vCenter 集群,它的证书通常由 vCenter 统一管理,但独立主机或者证书模式为「自定义」的情况下,需要手动更新。

检查阶段的核心目标是:列出所有证书的到期时间,标记出 30 天内到期的,区分哪些是 vCenter 管理的、哪些是外部 CA 签发的。外部 CA 签发的证书续订流程和自签名证书完全不同,前者需要重新向 CA 申请并替换,后者可以用 vCenter 自带的证书管理器重新生成。

2.3 证书过期后的典型故障现象与影响范围

证书过期不是「慢慢变坏」,而是到点直接翻车。最常见的现象是 vSphere Client 登录报错,提示「无法连接到 vCenter Server」或者「SSL 证书验证失败」。如果 STS 签名证书过期,SSO 登录会直接失败,所有依赖 SSO 的服务全部不可用。如果 Machine SSL 证书过期,vCenter 的 API 接口全部拒绝连接,自动化运维脚本、备份任务、监控系统全部断联。

更隐蔽的是 Solution User 证书过期。它不会立刻让界面崩溃,但会导致 vCenter 内部服务间通信异常,表现为某些功能时好时坏,比如虚拟机迁移失败、告警不触发、性能图表不更新。这种「玄学」问题排查起来非常费劲,因为表面上看服务都在运行,日志里却有一堆证书验证失败的报错。

影响范围取决于过期的是哪张证书。Machine SSL 过期影响所有外部访问;STS 签名证书过期影响所有认证;Solution User 证书过期影响对应服务的内部通信。最坏的情况是多张证书同时过期,这时候 vCenter 基本处于半瘫状态,只能通过命令行或者直接操作底层数据库来恢复。

3. 证书续订的实操路径:从自签名到外部 CA 的完整流程

3.1 自签名证书的续订:用 certificate-manager 重新生成

如果环境用的是 vCenter 自签名证书,续订相对简单。vCenter Server Appliance 自带一个certificate-manager工具,位于/usr/lib/vmware-vmca/bin/目录下。执行后会进入一个交互式菜单:

# 启动 vCenter 证书管理器 /usr/lib/vmware-vmca/bin/certificate-manager

菜单里常用的选项有:

  • 选项 1:替换 Machine SSL 证书(生成新证书)
  • 选项 3:替换 Solution User 证书
  • 选项 4:重新生成 STS 签名证书
  • 选项 8:查看当前证书状态

以替换 Machine SSL 证书为例,选择选项 1 后,工具会询问是生成新证书还是导入现有证书。选自签名生成,然后按提示输入 FQDN、组织信息等。工具会自动完成证书生成、替换和服务重启。整个过程大概 5 到 10 分钟,期间 vCenter 服务会中断,vSphere Client 无法访问。

注意:执行证书替换前,务必对 vCenter 做一次快照或者备份。证书操作一旦中途失败,回滚成本很高。我见过因为替换过程中 SSH 断连导致 vCenter 服务起不来的情况,最后只能从备份恢复。

替换完成后,用之前的检查命令确认新证书的到期时间。同时检查 vSphere Client 是否能正常登录,各个服务是否恢复正常。如果发现某个 Solution User 证书没有自动更新,需要单独选择选项 3 重新生成。

3.2 外部 CA 签发证书的更新:CSR 生成与证书链拼接

如果环境使用的是外部 CA 签发的证书,流程会多几步。首先需要生成 CSR(证书签名请求),然后提交给 CA 签发,最后把签回来的证书和私钥、根证书链一起导入 vCenter。

生成 CSR 可以在 certificate-manager 里操作,选择选项 1 后选「导入现有证书」之前,先选生成 CSR。工具会输出一段 Base64 编码的 CSR 文本,复制下来提交给 CA。CA 签发后会返回一个证书文件(通常是 .crt 或 .pem 格式),可能还包含中间 CA 证书。

拿到签发证书后,需要把私钥、签发证书、根证书和中间证书拼成一个完整的证书链文件。常见做法是:

# 拼接证书链:私钥 + 签发证书 + 中间证书 + 根证书 cat private.key > fullchain.pem cat issued.crt >> fullchain.pem cat intermediate.crt >> fullchain.pem cat root.crt >> fullchain.pem

顺序很重要:私钥在最前,然后是签发证书,接着是中间证书,最后是根证书。顺序错了会导致证书验证失败。拼接完成后,在 certificate-manager 里选择导入,指定 fullchain.pem 和私钥文件,工具会自动完成替换。

外部 CA 证书的坑在于证书链不完整。很多 CA 只给签发证书,不主动提供中间证书,如果 vCenter 的信任库中没有对应的根证书,替换后会报「证书链不完整」错误。解决办法是提前把根证书和中间证书导入 TRUSTED_ROOTS 存储区:

# 将根证书添加到 vCenter 信任库 /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store TRUSTED_ROOTS --alias root-ca --cert root.crt

--store TRUSTED_ROOTS指定信任库,--alias给证书起个别名方便识别,--cert指定证书文件路径。导入后再执行证书替换,验证就能通过。

3.3 ESXi 主机证书的更新:独立主机与 vCenter 纳管两种模式

ESXi 主机的证书更新分两种情况。如果 ESXi 已经加入 vCenter 集群,并且证书模式是「VMware 证书颁发机构」或「由 vCenter 管理」,那么主机证书会随 vCenter 证书一起更新,不需要单独操作。但如果 ESXi 是独立主机,或者证书模式设为「自定义」,就需要手动更新。

手动更新 ESXi 证书的步骤:

# 在 ESXi Shell 中生成新的自签名证书 /sbin/generate-certificates # 重启 ESXi 的证书相关服务 /etc/init.d/hostd restart /etc/init.d/vpxa restart

generate-certificates会重新生成 rui.crt 和 rui.key,覆盖旧的证书文件。重启 hostd 和 vpxa 服务让新证书生效。如果 ESXi 已加入 vCenter,重启 vpxa 后需要等几分钟让 vCenter 重新同步主机状态。

对于纳管主机,更推荐的做法是在 vCenter 里操作:进入主机「配置」→「证书」→「续订证书」,vCenter 会推送新证书到 ESXi 主机并自动完成替换。这种方式不需要 SSH 到每台主机,适合批量操作。

注意:ESXi 主机证书更新后,如果 vCenter 仍然显示证书告警,尝试断开主机再重新连接。有时候 vCenter 缓存了旧证书信息,重新连接会强制刷新。

4. 避坑指南:证书更新中最容易翻车的五个场景

4.1 替换证书后 vCenter 服务起不来

现象:执行 certificate-manager 替换 Machine SSL 证书后,vCenter 服务卡在启动阶段,vSphere Client 无法访问,SSH 能连上但服务状态异常。

原因:最常见的是证书链顺序错误或者私钥与证书不匹配。certificate-manager 在替换时会校验,但如果手动拼接的文件有问题,工具可能跳过某些校验步骤。另一个原因是替换过程中服务没有完全停止,导致新旧证书冲突。

解决:先检查/var/log/vmware/vpxd/下的日志,看具体报错。如果是证书链问题,重新拼接文件确保顺序为私钥→签发证书→中间证书→根证书。如果是服务冲突,执行service-control --stop --all停止所有服务,再重新运行 certificate-manager 替换,完成后service-control --start --all启动。

4.2 STS 签名证书过期导致 SSO 登录失败

现象:vSphere Client 登录页面报「身份验证失败」或「无法获取安全令牌」,即使输入正确的管理员密码也无法登录。

原因:STS 签名证书过期后,SSO 服务无法签发和验证令牌,所有认证请求被拒绝。这种故障不会影响已经建立的会话,但新登录全部失败。

解决:通过 SSH 登录 vCenter,执行 certificate-manager 选择选项 4 重新生成 STS 签名证书。完成后重启 SSO 服务:

service-control --restart vmware-stsd service-control --restart vmware-sts-idmd

如果 SSO 服务无法启动,检查/var/log/vmware/sso/下的日志,确认证书文件权限是否正确。STS 证书文件通常位于/etc/vmware-sso/目录下。

4.3 外部 CA 证书替换后浏览器仍然报证书不受信任

现象:证书替换成功,vCenter 服务正常,但浏览器访问 vSphere Client 时仍然提示证书不受信任,或者显示的是旧证书。

原因:浏览器缓存了旧证书,或者新证书的 SAN(Subject Alternative Name)字段不包含当前访问的 FQDN。另外,如果证书链不完整,浏览器无法验证到根证书。

解决:先清除浏览器缓存和 SSL 状态,Chrome 可以在chrome://net-internals/#hsts里删除域名安全策略。如果仍然报错,用 openssl 检查新证书的 SAN 字段:

openssl x509 -in /path/to/new.crt -noout -text | grep -A1 "Subject Alternative Name"

确认 SAN 里包含你访问 vCenter 使用的 FQDN 或 IP。如果没有,需要重新生成 CSR 并签发包含正确 SAN 的证书。

4.4 证书更新后自动化脚本全部报 SSL 错误

现象:用 PowerCLI、Ansible 或者自研脚本连接 vCenter 时,报「SSL certificate verification failed」或者「证书验证错误」。

原因:脚本之前信任的是旧证书的指纹,证书替换后指纹变了,脚本的证书固定(certificate pinning)机制拒绝连接。或者脚本使用的 CA 信任库中没有新证书的根证书。

解决:更新脚本中的证书指纹或者信任库。PowerCLI 可以用Set-PowerCLIConfiguration -InvalidCertificateAction Ignore临时跳过验证,但生产环境不推荐。正确做法是把新根证书导入脚本运行环境的系统信任库,或者更新脚本中硬编码的证书指纹。

4.5 多台 vCenter 组成的 SSO 域中证书更新顺序错误

现象:在有多台 vCenter 的 SSO 域中,更新了其中一台的证书后,另一台 vCenter 无法与它通信,报「伙伴证书验证失败」。

原因:SSO 域内各 vCenter 之间通过 STS 证书互信。如果只更新了一台的 STS 证书,另一台仍然信任旧证书,互信关系断裂。

解决:在 SSO 域中更新证书时,需要按顺序操作。先更新所有 vCenter 的 STS 签名证书,再更新 Machine SSL 证书。每更新一台,确认 SSO 域内其他 vCenter 能正常通信后再操作下一台。如果已经出现互信断裂,需要在每台 vCenter 上重新导出 STS 证书并导入到其他节点的信任库。

5. 把证书管理变成例行公事:监控、自动化与一个保命习惯

证书更新这件事,最怕的就是「等到过期才处理」。我现在的做法是提前 60 天开始准备,把证书管理变成例行巡检的一部分。具体来说,用 vCenter 的告警功能设置证书到期提醒:进入「系统管理」→「证书」→「证书管理」,在证书列表里可以配置到期前 60 天、30 天、7 天的告警。告警触发后会自动发邮件或者 SNMP trap,接入现有的监控系统。

如果环境规模较大,手动巡检不现实,可以用 PowerCLI 写一个定时任务,每周拉一次所有证书的到期时间:

# PowerCLI 脚本:检查 vCenter 证书到期状态 Connect-VIServer -Server vcenter.example.com -User admin@vsphere.local -Password 'xxx' $certificates = Get-VIManagedObject -Type CertificateManager $certificates | Get-Certificate | Select-Object Name, NotAfter, Status | Where-Object { $_.NotAfter -lt (Get-Date).AddDays(60) } | Export-Csv -Path "C:\Reports\cert-expiry.csv" -NoTypeInformation

这段脚本连接 vCenter,获取所有证书信息,筛选出 60 天内到期的证书并导出 CSV。Get-Certificate是 PowerCLI 的证书管理 cmdlet,NotAfter属性就是到期时间。把脚本挂到 Windows 任务计划里每周跑一次,导出的 CSV 可以接入监控告警。

对于外部 CA 签发的证书,续订周期更长,因为需要走 CA 的审批流程。我一般会在证书到期前 90 天就提交 CSR,留足审批和签发的时间。同时维护一个证书台账,记录每张证书的签发机构、有效期、负责人和续订流程,避免人员变动后没人知道怎么续。

最后说一个保命习惯:每次做证书操作前,强制走一遍快照加备份的流程。vCenter 的快照可以在服务起不来的时候快速回滚,但要注意快照不能替代完整备份,因为证书文件在快照回滚后可能和数据库状态不一致。我现在的习惯是:快照 + 导出 vCenter 的证书存储区 + 记录当前证书指纹,三样都做完再动手。从那以后,每次证书更新我都没有再翻过车。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询