再次记录,今天遇到的一个非常严重的认证问题,就是突然vCenter Web Client 无法登录,提示 “An error occurred while fetching identity providers. Please try again later. If problem persists, contact your administrator.”。查了一下 竟然找到KB,VMware KB 375109,原来这是由于 vapi-endpoint 服务无法启动,且解决方案用户证书无效导致的。
故障现象还原
1. 登录失败
在 vCenter Web Client 中尝试登录时,会收到以下错误信息:
An error occurred while fetching identity providers. Please try again later. If problem persists, contact your administrator.
2. 服务状态
# 检查 vapi-endpoint 服务状态
service-control --status vapi-endpoint
输出可能显示服务未运行。
3. 证书状态
# 检查所有证书的状态
for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo STORE $i; /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store $i --text | egrep "Alias|Not After"; done
输出可能显示多个证书已过期:
STORE MACHINE_SSL_CERT
Alias : __MACHINE_CERT
Not After : Expired date
STORE TRUSTED_ROOTS
Alias : 97cadaa2a7f732e1c93a9d53fbd325b24a105f53
Not After : Expired date
...
4. STS 日志
在 /var/log/vmware/sso/vmware-identity-sts.log 文件中,会看到以下错误:
Solution user cert is not valid.
核心原因分析
根据 KB 375109 的解释,问题的根本原因是:
解决方案用户证书无效或过期
虽然某些证书(如 machine_ssl 和 STS 证书)可能显示为有效,但解决方案用户证书可能已过期或无效,导致 vapi-endpoint 服务无法启动。
解决方法
1. 使用 vSphere Certificate Manager(推荐)
# 连接到 vCenter Server Appliance via SSH
ssh root@
# 进入 bash 模式(如果需要)
shell
# 启动 vSphere Certificate Manager
/usr/lib/vmware-vmca/bin/certificate-manager
#### 选择选项 6
在 vSphere Certificate Manager 菜单中,选择 选项 6:Replace Solution user certificates with VMCA certificates。
#### 填写模板
按照提示填写必要的信息,包括:
- 管理员密码
- 组织和组织单位信息
- 密钥大小和有效期
- 其他必填字段
#### 等待证书替换过程完成
系统将重新生成并替换解决方案用户证书。
2. 使用 vCert 脚本(备选方案)
如果更倾向于使用脚本化方法,可以参考 KB 文章中提到的 vCert 脚本:”KB vCert – Scripted vCenter expired certificate replacement”。
3. 验证解决方案
# 检查证书状态
for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo STORE $i; /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store $i --text | egrep "Alias|Not After"; done
# 检查服务状态
service-control --status --all
# 检查 vapi-endpoint 服务是否已启动
service-control --status vapi-endpoint
# 验证登录
# 使用 Web Client 或 PowerCLI 进行测试
Connect-VIServer -Server -User -Password
预防措施
1. 定期检查证书状态
# 创建一个定期检查证书状态的脚本
cat > check_certs.sh << 'EOF'
#!/bin/bash
for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do
echo "=== STORE: $i ==="
/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store $i --text | grep -E "Alias|Not After"
echo "-------------------"
done
EOF
# 使其可执行
chmod +x check_certs.sh
# 运行脚本
./check_certs.sh
2. 设置证书过期警报
# 使用 cron 定期运行证书检查脚本
crontab -e
0 0 1 * * /root/check_certs.sh > /var/log/cert_check.log 2>&1
3. 使用 VMCA 管理证书
# 配置 VMCA 自动更新证书(如果支持)
esxcli system settings advanced list | grep -i vmca
# 检查 VMCA 配置
/usr/lib/vmware-vmca/bin/vmcacli --help
故障排查
1. 证书替换过程中遇到问题
# 检查日志文件
tail -f /var/log/vmware/applmgmt/applmgmt.log
tail -f /var/log/vmware/vmca/vmca.log
2. 服务仍然无法启动
# 尝试重启相关服务
service-control --stop --all
service-control --start --all
# 检查服务状态
service-control --status --all
Reference: VMware KB 375109







