VMware VCenter 登陆 503 错误处理
date
Jul 24, 2023
status
Published
slug
vmware-vcenter-unable-login
tags
Tech
summary
VMware VCenter 登陆 503 错误处理
type
Post
VCenter 无法登陆,登陆页面显示以下类似信息:
503 Service Unavailable (Failed to connect to endpoint: [N7Vmacore4Http20NamedPipeServiceSpecE:0x00007fd84c00be80] _serverNamespace = / action = Allow _pipeName =/var/run/vmware/vpxd-webserver-pipe)
网上有很多类似的解决方法,一般情况下只需要重置对应的STS证书就能解决。最近发生几次无法照抄简单重置解决的Case,觉得还是有必要重新梳理下整个问题的原因及解决的一个流程和思路。
基本知识:
STS:VMware使用STS(Security Token Service)安全令牌服务证书提供了一种安全令牌机制,是 vCenter Server 内部的一项服务,用于颁发、验证和续订安全令牌。每当用户登录到 vCenter Server 时,都会在单点登录过程中向他们发放其中一个令牌,然后在发出请求时使用该令牌进行身份验证,同时他也是lookup服务的基础,如果STS失效则无法通过Certificate Manager管理其他证书。
VMCA:VMware 证书颁发机构,VMCA 是 vCenter Server 的一部分,可自动向需要的服务颁发证书
VMCAVMCA 主要负责签发 vCenter 内部组件之间通信的证书,STS负责用户访问证书。它们各自扮演CA的不同角色
证书签发后被保存在存放数字证书的库文件中,具体位置可以通过/usr/lib/vmware-vmafd/bin/vecs-cli store list 查看
通常我们看到的证书有以下几中:
MACHINE_SSL_CERT
TRUSTED_ROOTS
machine
vpxd
vpxd-extension
SMS
_STS_INTERNAL_SSL_CERT
整个webclient 访问到vcenter一个过程应该是
用户打开Web浏览器,访问vCenter Web Client界面,输入administrator用户名密码。
Web Client与vCenter Server的VMware Identity Manager(VIDM)服务进行安全TLS通信。这需要VIDM的服务器证书和Web Client的受信任根证书。
用户凭证提交到VIDM进行验证。VIDM连接Active Directory对用户名密码进行验证 从后台服务来看本质上使用了一个likewise轻量级目录树。
验证成功后,VIDM生成一个短期访问令牌(Token),包含用户的身份信息、权限等。
Web Client使用访问令牌向vCenter Server的VMware Platform Services Controller(PSC)发起服务请求。
PSC验证令牌的有效性,确认用户身份和权限。
PSC contacts vCenter Server的VMware Certificate Authority(VMCA)申请客户端证书,以建立Web Client与vCenter的安全TLS连接。
VMCA签发特定用户的客户端证书,发送给Web Client。
Web Client使用客户端证书与vCenter安全通信,显示vCenter管理界面给用户。
碰到这种问题如何做:
- 备份,备份,备份重要的事情说三遍
不管你是使用克隆快照还是什么办法,给自己留条退路,除非你就是最简单的esxi+vswitch用法,其他的情况下如何vcenter损坏你要重新安装配置过程还是相当的麻烦
- 检查服务状态
这种情况通常都有后台服务异常,第一步应该先检查服务状态,服务很多,那我们要如何确认那些服务是最先失败的,可以手工停止后再重启观察就清楚了,你也可以通过命令查看各个服务之间的依赖关系
- 起不来的服务看到了,那就去找到对应的服务检查日志文件
日志文件位于/var/log/vmware/ 找到对应的服务日志文件进行查看
- 首先应该检查你的STS是否过期
下载脚本
python脚本是通过rest接口方式取获取STS的证书过期日期

- 如果STS证书已经过期则执行以下过程
STS过期通常都伴有以下特征 :
vmware-vpxd 启动失败
登陆提示
HTTP Status 400 – Bad Request Message BadRequest,
Signing certificate is not valid
检查/var/log/vmware/vpxd-svcs/vpxd-svcs.log
ERROR com.vmware.vim.sso.client.impl.SecurityTokenServiceImpl$RequestResponseProcessor opId=] Server rejected the provided time range. Cause:ns0:InvalidTimeRange: The token authority rejected an issue request for TimePeriod [startTime=Thu Jan 02 09:22:13 EST 2020, endTime=Fri Jan 03 09:22:13 EST 2020] :: Signing certificate is not valid at Thu Jan 02 09:22:13 EST 2020, cert validity: TimePeriod [startTime=Wed Jan 06 20:44:39 EST 2010, endTime=Wed Jan 01 20:54:23 EST 2020]
fixsts.sh的调用逻辑
- STS更新后再次检查,确定STS证书正常
- 检查其他组件证书是否过期
是通过vecs-cli的方式去直接访问truststore文件去获取

- 如果有其他任何证书过期,则可以通过Certificate Manager管理工具进行更新
/usr/lib/vmware-vmca/bin/certificate-manager
可以选择选项4也可以选择选项8,这里执行的是相同的功能

根据提示指引输入administrator@vsphere.local 密码
Please configure certool.cfg file with proper values before proceeding to next step.
Press Enter key to skip optional parameters or use Default value.
Enter proper value for 'Country' [Default value : US] :
(注意: Country 值应仅为 2 位字母)
Enter proper value for 'Name' [Default value : Acme] :
Enter proper value for 'Organization' [Default value : AcmeOrg] :
Enter proper value for 'OrgUnit' [Default value : AcmeOrg Engineering] :
Enter proper value for 'State' [Default value : California] :
Enter proper value for 'Locality' [Default value : Palo Alto] :
Enter proper value for 'IPAddress' [optional] :
Enter proper value for 'Email' [Default value : email@acme.com] :
Enter proper value for 'Hostname' [Enter valid Fully Qualified Domain Name(FQDN), For Example : example.domain.com] :
Enter proper value for VMCA 'Name' : (
注意:其他选项都可以随意填写,这里容易产生混肴也可能产生失败的地方是 最后两个地方,hostname这里是需要填写成你的vcenter的主机名的可是之前的几个case在这里填写主机名都没有成功,一次后来在hosts文件里添加解析成功,根本原因还是应该与之前目录树中记录保持一致并在hosts文件中添加解析,查询目录树中主机名称可以通过以下命令
最后一项是VMCA的根证书名称可以填写为与主机名一致
- 更新完成后重启所有服务,并执行步骤7进行检查
另外如果重置了Machine SSL or VMCA Root certificates,有些插件需要重新注册如NSX, SRM, and vSphere Replication
- 以上都无法处理可能需要终极的处理方法,可以尝试使用vmware lsdoctor及healthy check工具进行检查
写在后面:
通过以上步骤也许并不能完全处理所有的状况,但是至少从逻辑和关系上做了少许的梳理,由于这种问题经常被忽略所以碰到类似问题有一个整体的概念这样解决起来相对就会有了解决思路,当然定期的检查vmware的环境和处理对应的警告还是必不可少的
