vSphere证书更新与续订实战:从过期故障到自动化管理 简介本资源聚焦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 -datesrui.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 restartgenerate-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 时仍然提示证书不受信任或者显示的是旧证书。原因浏览器缓存了旧证书或者新证书的 SANSubject 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 adminvsphere.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 的证书管理 cmdletNotAfter属性就是到期时间。把脚本挂到 Windows 任务计划里每周跑一次导出的 CSV 可以接入监控告警。对于外部 CA 签发的证书续订周期更长因为需要走 CA 的审批流程。我一般会在证书到期前 90 天就提交 CSR留足审批和签发的时间。同时维护一个证书台账记录每张证书的签发机构、有效期、负责人和续订流程避免人员变动后没人知道怎么续。最后说一个保命习惯每次做证书操作前强制走一遍快照加备份的流程。vCenter 的快照可以在服务起不来的时候快速回滚但要注意快照不能替代完整备份因为证书文件在快照回滚后可能和数据库状态不一致。我现在的习惯是快照 导出 vCenter 的证书存储区 记录当前证书指纹三样都做完再动手。从那以后每次证书更新我都没有再翻过车。希望帮到你。本文还有配套的精品资源点击获取