凌晨两点手机连续震动运维群里炸了锅vCenter Web Client 打不开业务部门反馈虚拟机调度已停摆外网监控平台也同步发了“vCenter 证书剩余有效期 0 天”的告警。打开浏览器试了一次页面直接红屏显示证书错误用 vSphere Client 登录卡在“无法建立安全连接”后台 SSH 还能进但 vpxd 服务一直在反复重启。这种场景凡是搞过 VMware 虚拟化的人早晚都会碰到一次——vCenter 证书过期。先说个结论遇到证书过期绝大多数情况下根本不需要重装 vCenter也不用去改系统时间糊弄用 VMware 自带的 certificate-manager 工具就能把整套证书重新签回来。这篇文章我会把“证书还能救”和“证书彻底废了”两种场景都讲透也会把证书推进过程里最容易忽略的 SSO 密码过期问题一起解决。文章写给刚从“证书到期不知所措”状态里走出来的新手以及想把这套流程固化成标准操作的老运维。1. 证书过期不是简单“点掉警告”的事先搞懂 vCenter 的证书体系在保护什么1.1 一次证书过期引发的全线故障很多人觉得“证书警告嘛浏览器里点一下继续访问不就行了”但 vCenter 这种企业级管理平台远没有那么简单。vCenter 自己的 Web Client、VAMI5480 端口管理界面、ESXi Agent、SDK 接口之间全部依赖 TLS 双向认证来建立信任关系。一旦证书过期麻烦是一连串的vSphere Web Client 直接拒绝加载页面上只有一个大红的“证书无效”。VAMI 界面登录后证书管理区块显示“已过期”状态部分版本连登录都进不去。vpxdvCenter 的核心管理服务启动后由于 TLS 握手失败不断退出表现为服务反复重启。底层 ESXi 主机虽然本身还在跑虚拟机但和 vCenter 之间的心跳断开管理面彻底失联。任何基于 vCenter API 的自动化、备份、云管平台全部开始报证书验证失败。我在 SSH 到后台翻日志时看到/var/log/vmware/vpxd/vpxd.log里刷满了certificate verify failed和 TLS 握手失败记录。原因不是 vpxd 的程序坏了而是它找不到一条可信任的证书链来证明“我就是我”。1.2 vCenter 内部到底有几套证书在各自生效cer 这个问题之所以复杂是因为 vCenter 不是只有一张证书。我整理了一个简化版清单证书类型主要作用过期后的常见表现VMCA Root 证书vCenter 内部证书体系的根所有内部证书都由它签发全套证书链失效几乎所有服务异常Machine SSL 证书Web Client、VAMI、ESXi Agent 对外通信使用浏览器警告、客户端无法连接Solution User 证书vpxd、vsphere-ui、vmon 等内部服务账号使用服务之间 401/403、模块间通信失败STS Signing 证书安全令牌服务 STS 的签名证书SSO 登录异常整个 Web Client 无法认证在这套体系里VMCA 相当于一个内部“发证机关”。它给机器签 Machine SSL 证书给各服务账号签 Solution User 证书。只要 VMCA Root 还在有效期内证书体系就没有彻底坏死用 certificate-manager 重新签发下游证书就能恢复。但如果是 VMCA Root 本身过期了问题就要升级到“强制重签”的层面。1.3 哪些临时手段能用哪些是深坑网上有一些所谓的“应急方案”很多是不靠谱的。我建议你记住这几点浏览器“继续前往”只能让管理员手动用一下API、SDK、vSphere Client、第三方平台全都会拒绝连接所以这不是修复方案只是临时查看手段。改系统时间是最坑的操作。把时间强行调回证书有效期表面看着不红了但一来 vCenter 内部组件的日志时间轴全乱二来域认证、时间同步服务全部跟着出问题后续排查难度成倍增加。反复重启 vpxd 是没用的。证书过期是信任链层面的问题不是服务状态问题你重启一百次也改变不了证书已失效的事实。正确思路只有一条用官方工具把这套证书重新生成、替换、重新建立信任链。接下来我就讲 certificate-manager 这个工具怎么用。2. 动手之前先摸清家底certificate-manager 工具定位与自检清单2.1 certificate-manager 到底是干什么的certificate-manager 是 VMware 在 vCenter Server ApplianceVCSA里内置的命令行工具路径通常在/usr/lib/vmware-vmca/bin/certificate-manager。它本质上是对底层 VMCA、VECSvSphere Endpoint Certificate Store和多个服务配置的一层封装脚本。它的核心能力有四个查看当前证书状态列出现有证书的指纹、有效期、存储位置。重新生成证书就是用 VMCA Root 重新签发一套新的内部证书替换掉旧的。替换为自定义证书比如公司 CA 或商业 CA 签发的证书实现对外证书合规。强制恢复在证书链彻底损坏或过期时绕过部分校验把整套证书拉回可用状态。有了这个工具你不需要手工去改每个服务的证书配置也不用去碰底层的 VECS 存储。它会自动完成“生成新证书 → 写入 VECS → 分发到各服务 → 触发服务重载”这条链路。它就像一个内部“证书管家”把最容易出错的手工环节全部自动化了。2.2 登录与菜单切换的基本操作操作 certificate-manager 前你需要先 SSH 登录到 vCenter Appliance。默认情况下登录后进入的是 appliance shell命令行提示符类似Command输入shell并回车再输入root的密码才真正进入 BASH shell。然后执行/usr/lib/vmware-vmca/bin/certificate-manager工具运行后会出现一个交互式菜单常见选项大致是Option 1: Replace Machine SSL certificate with Custom CertificateOption 2: Replace VMCA Root certificate with Custom Signing CertificateOption 3: Replace Solution User CertificatesOption 4: Regenerate all certificates有些版本叫 Reset expired certificatesOption 5: Replace STS Signing certificateOption 6: Regenerate Missing VMCA Certificates菜单项在不同版本6.5、6.7、7.0、8.0里略有差异但核心逻辑是一样的。你不需要记住全部选项关键在于能判断哪个菜单适合当前场景。2.3 动手前必须完成的三项检查在实际执行任何修复动作之前我强烈建议你先完成下面三个检查避免修到一半发现“密码忘了一个”“备份没做”之类的尴尬情况。第一确认 SSO 密码可用。证书重签过程中工具会反复要求输入administratorvsphere.local的密码这个密码就是 vCenter SSO 域管理员密码。如果你不确定它还能不能用先想办法确认如果密码已过期就按第 5 章的流程先把它重置了再继续。第二定位当前过期的证书范围。用下面的命令快速查看关键证书的到期时间openssl x509 -enddate -noout -in /etc/vmware-vpx/ssl/rui.crt这个文件是 vpxd 使用的 Machine SSL 证书。如果输出显示notAfter...已经不合法那基本可以确认证书过期。想看所有证书存储可以用/usr/lib/vmware-vmafd/bin/vecs-cli store list /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store MACHINE_SSL_CERT --text第三备份当前证书配置目录。在 vCenter 里执行cp -a /etc/vmware-vpx/ssl /root/ssl-backup-$(date %F)备份这一步虽然不能百分之百保证“还原现场”但至少能让你在出现问题时有原始材料可查。另外如果环境里有多个节点比如外部 PSC vCenter 的架构还要先记录各节点的角色和操作顺序。虽然 vCenter 7 之后大多是嵌入式架构但如果你还在维护 6.7 时代的外部 PSC 环境顺序错了会连不上。3. 证书还能救的普通场景直接用 regen 重新签发3.1 先判断“还能救”的边界不是所有证书过期都到了“全套推倒重来”的程度。certificate-manager 的普通重新生成流程适用于下面这种情况SSH 还能登录系统本身没有报“证书验证失败导致工具无法运行”的错误。vpxd 虽然起不来或反复重启但 SSO 服务vmdird、vmafd还活着。VMCA Root 证书本身没有过期或者只过期了下游的部分证书。简单说只要这个工具还能启动并正常读取现有证书信息那就属于“还能救”的范畴。这时候不需要强制模式用普通选项就能把整套证书刷新一遍。3.2 操作步骤是全部重签还是只签过期的运行 certificate-manager 后在菜单里选择对应“Regenerate all certificates”的选项。有些版本里它会进一步问你是“重新生成所有证书”还是“只重新生成过期证书”。我的建议是如果只有 Machine SSL 证书或某个 Solution User 证书过期优先选择只重签过期的部分影响面更小。如果有多张证书都显示异常或者你不确定哪些证书已经坏了直接选择全部重签省得签完这张又报下一张。选择完后工具会要求输入 SSO 密码。然后开始自动重签流程。整个过程中你会看到它在生成 key、写 VECS、同步 Solution User 证书等操作。正常情况下几分钟到十几分钟后就会出现类似Completed successfully的提示然后回到 shell 提示符。等待期间不要中断 SSH 连接也不要手动重启其他服务。工具在跑证书同步时如果被强行打断遗留的中间状态反而更麻烦。3.3 操作完成后为什么我依然建议重启一次 vCenter证书重签完成后虽然工具内部已经尝试让各服务加载新证书但很多后台服务vpxd、vsphere-ui、vmonapi 等对于证书变更的响应并不及时。尤其是一些常驻进程可能还持有旧的证书信息。所以在工具提示完成后我会再执行一次干净的重启rebootvCenter 重启一般需要 10 到 15 分钟。等它起来以后再用 VAMI 或 CLI 去验证证书状态。这一步不算多余它能让所有服务以全新的证书链初始化避免“证书明明换了服务还是报错”的假象。3.4 一个常见问题为什么不用手动生成 CSR 替换有朋友问“我用自己的内部 CA 签一张多省事为什么还要用 VMCA 重签”答案是手动替换自定义证书的路比想象中要宽但坑也更深。VMware 允许你把 Machine SSL 证书替换成自己 CA 签发的证书但前提是你要同时处理好整个信任链自定义证书必须包含完整的中间证书链VMCA Root 必须信任你的自定义 CA或你把它导入到对应信任库如果你替换了 VMCA Root整套 Solution User 证书也需要跟着重新签发这一步经常被漏掉漏掉的结果就是模块间互相不认证。所以如果你的主要诉求是“把过期证书救回来让平台恢复正常”而不是“对外证书合规审查”那最简单、最安全的方式就是让 certificate-manager 用 VMCA 重新生成整套证书。等平台稳定了再慢慢规划自定义证书的合规替换也不迟。4. 证书全面过期时的强制通道force-regenerate 与环境恢复4.1 什么时候必须走强制通道我遇到过一种更棘手的情况VMCA Root 证书本身已经过期或者整个证书链损坏到连 certificate-manager 自身都无法通过校验。表现就是运行工具时直接报错Exception in certificate verification: certificate has expired Error: Please verify that the certificate is valid and try again看到这类报错普通重签流程走不下去因为工具在启动时就校验了现有证书链链上过期证书直接堵住了入口。这时候需要强制模式。需要说明的是“强制模式”是 VMware 官方为这类场景准备的手段不是什么民间 hack。它的作用就是绕过工具启动时的证书链校验强制把整套证书重新生成一遍。4.2 强制重签的两个关键动作强制重签的操作关键在于设置一个环境变量再启动工具export VMWARE_CERT_MANAGER_ALLOW_FORCE1然后重新运行/usr/lib/vmware-vmca/bin/certificate-manager这时菜单里会出现一个带force的选项选项名称类似Force Regenerate all certificates。选择后流程和普通重签一样输入 SSO 密码等待工具重新生成整套证书链。这里想强调一点强制模式虽然能绕开校验但它不会帮你处理“SSO 密码不可用”的情况。如果你在过程中发现自己连administratorvsphere.local的密码都不知道那就得先走第 5 章的密码重置方案把 SSO 密码拿回来再继续。先重置密码再回来强制重签这是比较顺畅的顺序。4.3 强制重签后的“服务水位”检查强制重签完成后可比普通重签多留一个心眼。因为强制模式往往意味着系统已经处于相对恶劣的状态可能有一段时间没有正常服务了所以重签结束后建议先检查服务状态service-control --status --all重点看这几个服务的状态vpxdvsphere-uivmonapivmdirdsts如果 vpxd 仍不在 RUNNING 状态第一时间去看/var/log/vmware/vpxd/vpxd.log里面如果有 TLS 或证书相关报错说明可能还有组件没有加载到新证书再用service-control --restart --service vmware-vpxd重启一次 vpxd。如果日志里是数据库或其他业务层面报错那就是另一个方向的问题了需要单独排查。5. 密码过期时的第二条自救通道vCenter SSO 密码重置技巧5.1 分清是 root 密码过期还是 SSO 密码过期证书过期这件事经常和另一个运维痛点同时出现密码过期。很多环境的 vCenter 密码策略默认设了一段时间自动过期于是你会在同一时间遇到“证书过期”和“密码过期”的双重打击。但这两类问题的处理方法完全不同。症状根因解决方向SSH 登录提示密码过期5480 页面也进不去root 系统账户密码过期用 vCenter ISO 恢复模式或 ESXi 控制台重置SSH 能正常登录但 Web Client 提示 SSO 密码过期域管理员密码过期用 vdcadmintool 重置 SSO 账户密码在证书重签、VAMI 登录这些场景里卡住你的通常是 SSO 密码。所以下面重点说这个。5.2 使用 vdcadmintool 重置 adminvsphere.local 密码vdcadmintool 是 vCenter 内部维护 vmdirVMware Directory Service账户的工具位置在/usr/lib/vmware-vmdir/bin/vdcadmintool操作步骤shell /usr/lib/vmware-vmdir/bin/vdcadmintool菜单里选择Set account password不同版本选项号可能不同然后输入账户的 UPN比如administratorvsphere.local接下来输入两次新密码。需要注意vmdir 对密码复杂度的校验是比较严格的通常要求至少 8 位并且包含大写字母、小写字母、数字和特殊字符。如果设置得太简单工具会直接拒绝。设置成功后重启相关的身份服务让新密码在内部同步生效service-control --restart --service vmdird service-control --restart --service vmafd service-control --restart --service sts之后再去 Web Client 登录一般就能通过了。5.3 重置密码后还有几个“隐藏位置”要记得同步SSO 密码重置完成后很多运维会忽略一个问题对外集成平台的凭据已经旧了。如果你在 vCenter 上配置了 vRO、vRA、VMware Aria Automation、备份代理、监控告警插件这些平台的 SSO 账号密码还是老的会在接下来几天里接二连三地报“认证失败”。这类集成凭据没法用命令一键全部更新只能一个个到对应平台的控制台里重新输入新的 SSO 密码。虽然繁琐但总比事后被连环告警追着跑要好。另一个隐藏位置是 VAMI 里的备份任务配置如果备份任务用的是 SSO 账户密码重置后也要重新验证一次否则定时备份可能默默失败。5.4 一个容易踩的坑vdcadmintool 连不上数据库我在实际执行中遇到过几次 vdcadmintool 报 LDAP 连接失败或无法打开 vmdir 数据库的情况。这通常是因为 vmdir 服务不在运行状态。遇到这种状况不要慌先启动 vmdir再重新跑工具service-control --start --service vmdird /usr/lib/vmware-vmdir/bin/vdcadmintool如果 vmdir 一直启动失败那问题就不只是密码过期了可能还叠加了证书层面的信任问题。这种情况建议先回到第 4 章的强制重签流程把证书链拉通再回过来处理密码。6. 修完不等于完事三层验证、日常巡检与几个真实踩坑记录6.1 三层验证一看就会证书修复和密码重置都做完后别急着宣布收工。我习惯用三层验证来确认系统真的恢复正常了。第一层浏览器访问。打开https://vcenter-ip/点击地址栏的锁形图标查看证书有效期是否已经刷新到当前日期之后。同时登录 Web Client 确认能正常进入。第二层命令行验证。用 openssl 直接对 443 端口做一次 TLS 握手取出服务器证书的过期时间echo | openssl s_client -connect vcenter-ip:443 -servername vcenter-ip 2/dev/null | openssl x509 -noout -enddate这条命令在 Linux 机器上就能执行。如果输出里的notAfter已经是未来日期说明 Machine SSL 证书已经生效。第三层VAMI 验证。访问https://vcenter-ip:5480在证书管理和健康区域查看整体证书状态确认没有红色告警。这三层都过了修复才算真正闭环。6.2 给证书建一份“到期日历”证书过期这种问题最大的特点就是可预见。它不像磁盘故障那样来得突然而是有一个明确的到期日期。所以最好的处理方式是建立主动监控而不是等别人发现平台挂了再来救火。建议至少做到用外部监控平台周期性探测https://vcenter-ip:443的证书剩余天数提前 30 天告警。在运维日历上把 vCenter 证书“主动续签”设为每两年一次的例行事项不要等时间恰好卡在节点上。vCenter 自身的 VAMI 页面也有证书到期信息偶尔登录看看别把它当成“平时不用看”的页面。如果你已经经历过一次生产事故就会明白提前 30 天收到一封“证书将于 30 天后过期”的邮件和凌晨两点被监控电话叫醒感受是完全两回事。6.3 三个真实踩坑记录写在最后第一个坑证书过期第一天我差点选择重装 vCenter。当时觉得系统已经不可用不如直接重建省事。但后来在 VMware 官方 KB 里找到 certificate-manager 的强制重签方案几分钟就恢复了。所以你第一反应不应该是重装而是评估当前系统盘、数据库和服务状态是否完好。只要能 SSH、日志里没有硬件或数据库故障优先尝试证书重签。第二个坑只重签 Machine SSL 证书没处理 Solution User 证书。我早期有一次只替换了对外证书结果 vpxd 和 vsphere-ui 之间还是互相不认日志里刷满了 401 和 403 错误。后来才意识到Solution User 证书是每个内部服务用来证明身份的“工牌”你只给大门换了锁员工手里的卡还是旧的照样进不去。所以重签时要么选择全部重签要么就按工具提示把涉及到的证书类型一次都换了。第三个坑证书修完后忘了同步外部平台凭据。那次折腾完 vCenter第二天业务反馈备份平台连接到 vCenter 失败一查是备份代理还在用旧证书握手。这个问题严格来说不是证书修复本身的问题而是“证书信任变更”波及了所有关联系统。教训就是修证书前先梳理一下哪些平台在跟 vCenter 做 TLS 对接修复后主动去更新它们的信任配置。最后再提醒一句处理完证书后第一件事就是去监控平台更新 SSL 探活任务的预期证书指纹别让它继续用老证书去探测然后一直报错。证书修复这套流程说到底就是让 vCenter 自己重新信任自己一次动手前多做备份、多记信息、分清优先级真出问题了也总能退回来。