症状:
- vCenter登录失败
- vCenter网页界面明明输入了SSO账号administrator@vsphere.local和密码,但是还是提示“需要用户名和密码”
- 英文版的错误为:“User name and password are required”
- 没有过期的常规证书如SSL,和VCSA没有硬盘空间不足的情况,参考:https://vmlib.com/vcsa-commands
先说结论,大几率是因为STS服务的证书过期
vCenter STS是什么
vCenter STS的中文为”安全令牌服务“。vCenter 的安全令牌服务 (STS) 是负责签发、验证和更新安全令牌的重要服务,尤其在单点登录 (SSO) 环境中。STS 通过生成并签署安全断言标记语言 (SAML) 令牌来确保 vSphere 服务之间的安全通信。这些令牌用于认证用户和服务,确保它们在 vSphere 基础架构内安全地交互。
STS 签名证书的作用是用于对这些 SAML 令牌进行签名。默认情况下,这个证书是由 VMware 证书颁发机构 (VMCA) 管理的,有较长的有效期。通常,用户不需要替换 STS 签名证书,因为它并不用于外部通信。然而,如果公司的安全策略要求,或证书过期时,管理员可以通过 vSphere Web Client 或 API 来手动更新或替换该证书。
如果STS签名证书过期,就会出现上述问题,无法登录vCenter并报错”需要用户名和密码“或”User name and password are required“
如何验证STS证书是否过期?
一般来说,可以正常登录的情况下,vCenter vSphere Client的GUI就可以看到
具体位置在vCenter点击菜单 – 管理Administration – 证书管理Certificate Management
但是我们现在登陆不到的状态下,只能通过VMware官方的checksts.py脚本检查。
https://knowledge.broadcom.com/external/article?legacyId=79248(Checking Expiration of STS Certificate on vCenter Servers)
注意:STS证书的状态不能通过常规检查SSL证书的命令查看,见https://vmlib.com/vcsa-commands的“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”
只能通过VMware官方的checksts.py脚本检查,具体步骤和截图为:
- 拉到文章底部,下载checksts.py脚本
- 将脚本上传至VCSA的/tmp目录
- cd 到脚本目录
- 执行脚本#python checksts.py
- 当见到下列字句时,证明STS证书已经过期 “You have expired STS certificates”
如何更新STS证书
很简单,VMware官方也有做好的脚本去更新STS证书:
https://knowledge.broadcom.com/external/article?legacyId=76719 (文章名字”Signing certificate is not valid” error in vCenter Server Appliance)
更新STS证书的具体步骤:
- 同样去到上面的KB文章,拉到文章底部,下载fixsts.sh脚本
- 上传fixsts.sh脚本到VCSA的/tmp目录
- 这次是shell脚本,所以要添加执行权限#chmod +x fixsts.sh
- 执行脚本#./fixsts.sh,输入administrator@vsphere.local密码
- 执行完毕后,会见到类似下面的提示
成功更新STS证书后,按照提示需要重启VCSA全部服务:
- #service-control –stop –all && service-control –start –all
大概等10-20分钟全部服务重启后,重新刷新浏览器就可以成功登录vCenter了
注意:如果vCenter是设置了Linked Mode,其他节点的服务也需要重启一下。