尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

vCenter 6.7证书过期导致503错误:STS证书与SSL信任链修复全指南

vCenter 6.7证书过期导致503错误:STS证书与SSL信任链修复全指南 看到标题里带“vCenter 6.7”“证书过期”“503”这几个词的我基本能确定你已经被生产环境逼到墙角了。登录vSphere Client弹出鲜红的503 Service Unavailable管理页面打不开虚拟机倒是还在跑但你就是进不去控制台平台所有运维操作全部瘫痪。这种状态持续越久业务风险越高而且后台的vpxd、SSO、STS这些服务天天在日志里刷错看着就心慌。这篇文章我打算把vCenter 6.7证书过期导致503的修复路径完整捋一遍重点放在两个最容易翻车的环节STS证书更新以及SSL信任链修复。先说清楚原理再给可直接照做的步骤最后附上我实际踩过的坑。适合刚接手虚拟化平台的运维新人也适合被这套证书体系折磨过但没系统整理过思路的老手——看完以后下次再遇到同类问题你应该能在半小时内定位到根因而不是在多个KB页面和日志文件之间来回折腾。1. 先搞清楚vCenter 6.7的503报错到底是怎么来的1.1 常见故障现场我先把你可能遇到的场景列一下你对号入座浏览器访问https://vcenter-fqdn/ui或https://vcenter-fqdn/vsphere-client页面直接显示503 Service Unavailable刷新也没用。登录vCenter Server Appliance管理界面VAMI端口5480正常但vSphere Client就是连不上。用API或者PowerCLI调用vCenter接口返回类似503 Service Unavailable日志里出现STS token验证失败之类的信息。检查服务状态时vmware-vpxd、vmware-vsphere-ui等服务处于启动失败或反复重启状态。更隐蔽的情况是登录能进但执行某些操作时突然报错比如添加主机、创建虚拟机、查看任务和事件时中断这也是证书或信任关系出问题导致的。从我处理过的案例来看很多人一开始都以为是vCenter服务崩了或者内存耗尽直接重启VCSA结果重启完问题依旧甚至更糟——因为证书问题不会因为重启而消失反而会让部分服务在启动阶段就因为找不到可信证书而进入失败状态。1.2 证书在vCenter内部扮演的角色vCenter 6.7的内部架构远没有从界面上看起来那么简单。它不是一个单体服务而是由SSO、STS、vmdir、vmafd、vmca、vpxd、vsphere-ui等一堆组件构成的分布式体系。组件之间通信时互相要出示证书证明身份其中三张证书最关键STS签名证书STS signing certificate。STS全称是Security Token Service负责签发SAML安全令牌。当vCenter的各个组件比如vpxd向SSO请求令牌之间需要互相认证时STS的签名证书就是信任链条的根。如果STS证书过期所有基于SAML的认证都会失败这是503报错最常见的原因之一。machine SSL证书。这是vCenter对外提供HTTPS服务时使用的证书浏览器连接vSphere Client页面、API客户端连接443端口时验证的就是它。machine SSL证书过期浏览器会报不安全连接但通常不一定会直接导致503。不过如果machine SSL证书和内部信任根不匹配vpxd等后端服务在回调自身HTTPS接口时也会出问题。solution user证书。vCenter为每个集成组件比如vpxd、vsphere-ui、vapiEndpoint等创建了独立的solution user每个用户有对应的证书。如果这类证书过期对应组件调用SSO接口时会被拒绝表现为服务启动不了或者API调用失败。可以这么理解STS证书是总钥匙machine SSL证书是门锁solution user证书是各房间的钥匙。这些环节任何一个出问题都会破坏内部信任链条最终在用户侧表现为“服务不可用”或者“登录失败”。1.3 先定位再动手别盲目重启遇到503我的建议是先花10分钟看日志而不是第一时间重启。vCenter 6.7的关键日志路径如下vpxd服务日志/var/log/vmware/vpxd/vpxd.logSSO相关日志/var/log/vmware/sso/vmdir/vmafd日志/var/log/vmware/vmafd/证书管理相关日志/var/log/vmware/vmca/搜索日志时优先找这几个关键词certificate expired、STS、signature invalid、unexpected status 503。实际工作中我发现vpxd.log里如果出现类似certificate verify failed或者unable to get local issuer certificate的报错基本就能确定是证书链失效。此时再配合证书过期时间检查根因就非常清晰了。另外搜索热词里提到的unexpected status 503 service unavailable: cc switch local proxy failed while ...这类报错在部分vCenter版本里也会出现它的本质同样是内部服务通道不可用很多情况下和证书信任关系破裂有关排查时不能只看表面报错要顺着日志往上追。2. 动手前先给vCenter做一次“证书体检”2.1 进入vCenter命令行环境vCenter Server ApplianceVCSA底层是Photon OS所以排查证书问题需要用到SSH和命令行工具。先开启SSH使用root账户登录VCSA的DCUIDirect Console User Interface按F2进入系统配置。找到“Enable SSH”选项并开启。然后从你的管理机通过SSH连接VCSAssh rootvcenter-fqdn。进入Bash Shell。VCSA默认的root shell是受限的需要执行一次切换shell.set --enabled True shell执行完以后你才能正常使用完整的Bash命令和vCenter命令行工具。注意所有修改类操作建议在业务低峰期进行并且提前为VCSA打快照或做文件级备份。提示如果VCSA已经严重异常SSH能连上但shell命令反应很卡不用急先只做只读操作定位问题不要贸然重启服务否则可能把VAMI也带崩。2.2 查看证书过期时间很多同行习惯用Linux下通用的openssl命令查看证书这个思路在vCenter里同样适用。几个最常用的命令查看VECS证书库中机器SSL证书的过期时间/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store MACHINE_SSL_CERT --text | grep -A2 Not After查看某个证书文件的有效期openssl x509 -enddate -noout -in /etc/vmware-vmca/machine-ssl.crt直接查看443端口当前证书的有效期这个方法和Linux上查Web站点证书一样echo | openssl s_client -connect localhost:443 2/dev/null | openssl x509 -noout -enddate还可以使用vCenter自带的证书管理工具列出所有证书的状态/usr/lib/vmware-vmca/bin/certificate-manager list执行后会输出机器SSL证书、solution user证书、STS证书等相关信息。如果你在列表里看到某张证书的Not After时间已经早于当前时间或者证书状态显示为“已过期”那503的根因基本就锁定了。2.3 分清当前要处理的是哪张证书证书体检的关键不是“能不能用”而是“哪张证书坏了”。我整理了一张表方便你对照证书类型存储/位置过期后的典型表现更新入口STS signing certificatevmdir数据库SSO认证失败、vpxd启动失败、503vdcadmintool或certificate-managermachine SSL certificateVECS: MACHINE_SSL_CERTHTTPS警告、客户端连接异常、内部回调失败certificate-manager regeneratesolution user certificatesVECS: SOLUTION_USERS_CERT组件API调用失败、服务起不来certificate-manager renewVMCA根证书/etc/vmware-vmca所有子证书信任链断裂certificate-manager replace root绝大多数情况下先查STS和machine SSL这两张最容易中招。如果STS证书显示过期时间已经是昨天甚至一个月前那就不用犹豫了直接跳到第3节开始处理。3. 更新STS签名证书修复503问题的关键步骤3.1 为什么STS证书这么关键vCenter 6.7里STS证书存放在vmdir目录服务数据库中。所有组件对STS证书的信任是通过vmdir里保存的证书指纹来对接的。当STS证书过期vmdir记录的指纹和服务实际使用的证书之间不再匹配SSO服务会拒绝签发或验证令牌于是vpxd向vsphere-ui、vapi等服务发起的内部请求全部失败对外就是503。这里有个很关键的认知STS证书不能像普通机器证书那样“直接重新换一张”因为换完以后必须同步更新vmdir里的信任记录。只换证书不同步信任库等于没换甚至可能从“所有组件都不信任”变成“部分组件信任、部分不信任”的混乱状态。3.2 先尝试延长现有证书有效期如果你的STS证书已经过期但vCenter的SSO功能还勉强能用比如VAMI能登录部分API还能调通可以优先尝试直接延长现有证书的有效期。这种方案的好处是证书内容不变只修改有效期所以vmdir中的指纹不会变信任关系不用重建风险最小。vCenter 6.7 Update 3及之后版本certificate-manager工具提供了modify-cert子命令可以直接延长证书有效期。常见用法如下/usr/lib/vmware-vmca/bin/certificate-manager modify-cert --cert 证书路径 --days 天数实际操作时先找到对应的证书文件路径比如STS证书可以从vmdir相关目录获取。把--days设置为一个合理值比如10953年或更多然后等待工具执行完成。执行成功后记得重启vmon服务让所有组件重新读取证书service-control --stop --all service-control --start --all注意modify-cert对某些内置证书的支持在不同小版本有差异如果提示不支持就要走下面更彻底的更新流程。3.3 证书已过期且无法登录时的修复流程如果STS证书已经彻底过期vCenter登录按钮都点了没反应SSO服务起不来这时需要进入更底层的方式更新证书。核心思路是先让vmdir和vmafd服务处于可控状态然后通过vCenter自带的目录管理工具更新STS证书。具体步骤如下SSH登录VCSA进入Bash Shell。停止所有VMware服务避免后续操作被异常进程干扰service-control --stop --all确认vmdird、vmafd服务已经停止service-control --status --all | grep -E vmdir|vmafd运行vmdir的管理工具vdcadmintool/usr/lib/vmware-vmdir/bin/vdcadmintoolvdcadmintool是一个交互式工具不同的6.7小版本菜单略有差异。你需要找到类似 “Update STS signing certificate” 或 “Regenerate STS certificate” 的选项。选定后工具会要求指定新的STS证书文件或者自动生成一张新的STS证书并写入vmdir数据库。更新完成后退出vdcadmintool然后重启所有服务service-control --start --all服务全部起来后再回到浏览器刷新vSphere Client页面。如果一切顺利登录页应该能正常加载不再报503。注意vdcadmintool操作前一定要确保vmdir服务处于停止状态否则写入证书时会因为数据库锁或连接冲突而失败。我在实际处理中遇到过工具卡在“waiting for vmdird”的情况就是服务没完全停干净导致的需要回到第2步多等一会儿或者用ps命令确认进程已经退出。3.4 验证STS证书状态更新完STS证书后不要急着开香槟先做几步验证再次运行certificate-manager list确认STS证书的状态显示为“有效”。查看vmdir中记录的证书指纹和实际证书是否一致。不同版本命令略有差异但可以通过vmafd工具或vdcadmintool的查询菜单来核对。检查vpxd日志确认不再出现SAML签名验证失败、STS token invalid之类的错误。如果STS证书有效但vpxd仍然报503那就要进入第4节检查machine SSL证书和SSL信任链。4. 轮换machine SSL证书并修复SSL信任链4.1 machine SSL证书过期后的表现machine SSL证书过期最直观的表现是浏览器访问vCenter页面提示证书无效。但在已经出现503的场景里它还有另一个隐蔽影响——vCenter内部组件在回连自身HTTPS接口时会因为证书链不信任而失败。比如vpxd服务启动时要向lookup service注册自己注册过程走的是HTTPS回调如果machine SSL证书过期这个回调就会被对端拒绝。vpxd注册不上vSphere Client自然就访问不到表现依然是503。所以STS证书修复完以后建议顺手把machine SSL证书一并检查并轮换。4.2 用certificate-manager轮换machine SSLvCenter 6.7提供了certificate-manager交互菜单专门管理机器证书、信任根和solution user证书。轮换machine SSL证书的推荐做法运行证书管理工具/usr/lib/vmware-vmca/bin/certificate-manager在交互菜单中选择 “Regenerate Machine SSL certificate”这个选项会基于当前VMCA根证书签发一张新的machine SSL证书并自动更新到VECS的MACHINE_SSL_CERT存储中。工具会要求输入vCenter的FQDN、IP地址等信息确认无误后执行。如果vCenter有多个IP或别名注意要把它们都写在证书的SAN里否则会出现证书名称不匹配的问题。更新完成后工具提示需要重启服务可以用service-control --stop --all service-control --start --all完成。如果你的场景要求使用企业CA签发的证书那就不能选Regenerate而应该选 “Replace Machine SSL certificate”然后提供由企业CA签发的证书文件和私钥。这个流程在企业环境中更常见但前提是企业CA已经信任VMCA根或建立了交叉信任否则内部组件仍然不认。4.3 同步VECS信任库和服务机器证书轮换后接下来要确认VECS证书库里的信任关系是完整的。VECS是vCenter的证书存储组件里面有多个store比如MACHINE_SSL_CERT、TRUSTED_ROOTS、SOLUTION_USERS_CERT。检查TRUSTED_ROOTS中是否有当前VMCA根证书/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store TRUSTED_ROOTS --text如果TRUSTED_ROOTS里的根证书也过期了需要先用certificate-manager菜单里的 “Replace VMCA Root certificate” 选项更新根证书然后再重新签发machine SSL和solution user证书。这个顺序不能反否则新签发的证书在旧根下没有意义。完成证书更新后建议把所有vmon管理的服务全部重启一遍service-control --stop --all service-control --start --all这个步骤的目的是让vpxd、vsphere-ui、sps、vapiEndpoint等组件重新加载新证书并重新向SSO和lookup service注册。4.4 浏览器端信任修复服务端全部修好以后别忽略客户端一侧。很多运维在vCenter里操作半天最后发现浏览器里还是打不开其实是浏览器缓存里的旧证书链在作怪。清理浏览器SSL缓存或彻底关闭浏览器重开。如果vCenter使用了企业内网CA签发的证书确认客户端机器已经把企业根证书导入到“受信任的根证书颁发机构”。使用FQDN访问vCenter不要用IP。因为证书的CN和SAN通常匹配FQDN用IP访问大概率会触发证书名称不匹配警告严重的会被浏览器直接拦截。vSphere Client和PowerCLI也一样如果之前连接过旧证书需要先断开现有连接清除本地的known hosts或受信任证书缓存再重新连接。5. 一次完整的修复实战记录5.1 现场现象与日志定位给你还原一个我实际处理过的场景。某个客户的VCSA 6.7 U3某天早上开始vSphere Client登录页直接503VAMI5480端口能打开但显示部分服务异常。SSH进去查看服务状态service-control --status --all输出里vpxd、vsphere-ui、sps都是“Stopped”或“Start Failed”。查看vpxd日志grep -i certificate /var/log/vmware/vpxd/vpxd.log | tail -50日志里大量出现类似certificate has expired和STS signature verification failed的报错。再用openssl查看443端口证书发现machine SSL证书有效但STS信任已经崩了。定位结论问题根因是STS签名证书过期导致SSO令牌验证失败进而vpxd无法完成内部注册和认证对外表现为503。5.2 分步操作与预期输出第1步停止所有服务。service-control --stop --all预期输出所有服务状态变为Stopped。第2步确认vmdir相关进程退出。ps -ef | grep -E vmdird|vmafd如果还有残留进程等几秒或者手动kill确保后续操作不被干扰。第3步通过vdcadmintool更新STS证书。/usr/lib/vmware-vmdir/bin/vdcadmintool按菜单提示选择更新STS签名证书的选项指定新的证书有效期。工具执行完成后变更新证书已成功写入vmdir数据库。第4步启动所有服务。service-control --start --all启动过程可能需要10到20分钟尤其vpxd首次启动会比较慢不要中途打断。第5步确认服务状态正常。service-control --status --all这时vpxd、vsphere-ui、sps都应该是Running状态。第6步浏览器验证。使用FQDN访问https://vcenter-fqdn/ui如果证书不是私有CA签发的浏览器会提示不安全连接属于正常现象如果使用vCenter默认证书可以直接继续访问。登录后确认主机、虚拟机列表都能正常显示任务和事件能正常加载。5.3 恢复后的验证清单我习惯在恢复后跑一遍完整验证避免漏掉隐性问题vSphere Client能成功登录。主机和虚拟机清单能正常显示。能执行一个最小操作比如创建快照或编辑虚拟机设置。API接口调用正常比如用PowerCLIConnect-VIServer能成功。检查vpxd日志确认没有新的SAML或证书相关报错。检查VAMI页面5480端口服务状态全部为正常。全程记录操作时间和命令输出尤其是证书更新前后的指纹和有效期对比方便后续审计和问题追溯。6. 常见问题与避坑指南6.1 更新完STS证书仍然503这种情况我遇到过不止一次原因通常有三种一是solution user证书也过期了。STS证书只是打开了认证通道solution user证书过期同样会导致vpxd等组件无法向SSO请求令牌。解决办法是使用certificate-manager工具重新生成所有solution user证书然后重启服务。二是vmdir里的STS证书指纹没有同步。更新STS证书时如果vdcadmintool中途中断或者多个vCenter节点之间复制没完成就会出现“证书文件是新的但vmdir记录的指纹还是旧的”。需要重新运行vdcadmintool完成同步。三是lookup service里注册的服务信息失效。此时即使证书都正常服务注册关系也是错的。可以在certificate-manager工具中选择 “Reset Directory partitions and services”让vCenter重新初始化服务注册关系然后再次重启服务。6.2 不要只重启vpxd就完事vpxd是整个vCenter里最核心的服务很多人习惯遇到503就重启vpxd。如果证书没问题重启vpxd确实能解决大部分临时故障但如果证书已经过期只重启vpxd没有任何意义因为它启动时依然会去验证STS证书和SSL信任链。证书问题必须先解决然后再谈重启服务。而且所有服务重启的顺序也建议通过service-control --start --all统一拉起不要手工一个个启否则组件之间的注册顺序错了又会引发新的“幽灵问题”。6.3 证书有效期显示1970年个别情况下openssl查看证书时会发现证书有效期显示1970年或其他很早的时间。这不是证书本身的问题而是VCSA的系统时间不对。如果VCSA的NTP配置错了或者没有配置NTP硬件时钟偏差会导致证书校验逻辑把“未生效”误判为“过期”。处理办法先同步系统时间再检查证书。命令参考ntpdate -u ntp-server或者确保VCSA的NTP服务已经配置并启动。时区错误也会有类似效果建议统一使用UTC或者你的业务时区并确认所有vCenter节点保持一致。同步时间后重新用openssl查看证书有效期。如果证书实际没过期但系统时间曾经错乱过部分服务的token验证可能仍然异常稳妥做法是同步时间后重启vmon服务。6.4 关于SSL信任修复的几个细节修复SSL信任链时有几点容易被忽略更新VMCA根证书后必须重新签发machine SSL和所有solution user证书不能只在界面上“刷新”一下。内部组件之间的信任依赖VECS的TRUSTED_ROOTS存储。如果VMCA根证书被误删即使machine SSL证书显示正常服务之间依然会互相不信任。如果vCenter配置了外部PSCPlatform Services Controller信任链修复必须在PSC和vCenter两侧分别检查因为STS证书和SSO服务都在PSC上。只修vCenter一侧问题不会彻底解决。6.5 长期维护建议vCenter 6.7已经属于较老的版本序列建议你为证书有效期建立监控。vCenter自身的VAMI页面能看到证书状态也可以写一个简单的巡检脚本每天用openssl检查各关键证书的到期时间并输出告警。证书有效期建议设置在3年左右并在到期前3个月就规划更新窗口。每次进行证书操作前务必完成VCSA的快照备份。证书操作失败不会直接损坏虚拟机但服务配置错乱以后排查成本很高有快照可以快速回滚。提示vCenter 6.7的生命周期已经接近尾声如果条件允许尽早规划升级到7.x或8.x。新版本的证书管理界面更友好STS和其他内置证书的更新流程也优化了很多不再需要频繁手工介入。最后再分享一个小技巧我在处理vCenter证书问题后都会顺手把当时相关的日志、证书指纹和执行过的命令保存到一个文档里。这么做不是为了应付审计而是因为vCenter这类企业级组件的证书问题有一个特点它很少只出现一次。半年后如果另一套环境出现类似的503拿出当时的排查记录可以省掉至少2小时的日志分析时间。另外如果你的vCenter是多节点部署或接了外部PSC证书更新时的操作顺序有可能是PSC先、vCenter后。这个顺序搞反了即使所有证书都成功更新服务之间依然会呈现一种“看起来正常但实际访问不了”的假死状态。遇到这种复杂拓扑建议优先查看VAMI里的拓扑信息确认后再动手。希望这篇基于实际经验整理的修复指南能帮你少走弯路。证书过期这事本身不可怕真正可怕的是在错误的方向上反复重启服务把信任链越搞越乱。按着“先定位、再体检、然后更新STS、最后修SSL信任”的顺序走大概率一次就能解决。
返回列表