在 Windows 上安装了 vCenter Server 6.5.x 和 6.7.x 的环境中,您会遇到以下症状:
- VMware VirtualCenter Server 服务无法启动。
- 通过 Web 客户端登录会显示类似以下内容的错误:
HTTP 状态 400 – 错误请求消息 BadRequest, 签名证书无效
- 通过 Web 客户端登录会显示类似以下内容的错误:503 Service Unavailable (Failed to connect to endpoint: [class Vmacore::Http::NamedPipeServiceSpec:0x000000663918de70] _serverNamespace = / action = Allow _pipeName =\.\pipe\vmware-vpxd-webserver-pipe)
- 替换 PSC 或 VCSA 上的任何证书都会失败。
- 使用lsdoctor 工具从查找服务手动添加、修改或删除注册失败。
- 部署新 PSC 并执行跨域重新指向失败。
- 在现有 SSO 域上部署新 PSC 作为复制伙伴失败。
- 通过 Web 客户端登录会显示类似以下内容的错误:
无法连接到 vCenter Single Sign-On 服务器 https:// VC_FQDN /sts/STSService/vsphere.local 或 无法连接到 vCenter Single Sign-On 服务器 https:// VC_FQDN :7444/sts/STSService/vsphere.local 或 [400 ] 向 vCenter Single Sign-On 服务器发送身份验证请求时出错
原因
当安全令牌服务 (STS) 证书过期时,会出现这些问题。这会导致内部服务和解决方案用户无法获取有效令牌,从而无法按预期运行。
注意:当 STS 证书过期时,它会在没有警告的情况下过期。在某些系统上,此过期可能会在初始部署后的两年内发生。
以下是 STS 签名证书预计寿命约为 2 年的场景:
- 从 U2 或更高版本开始全新安装 PSC/vCenter Server 6.5(仅限 6.5 行)。
- 全新安装 PSC/vCenter Server 6.5 U2 或任何更高的 6.5 版本并升级到更高版本,包括 6.7 和 7.0。
- STS 签名证书已使用 PSC 或 vCenter Server 安装后的 certool 进行替换。
- STS 签名证书已替换为自定义证书(内部/外部 CA 签名)。
风险
该脚本与 VMDIR 的数据库进行交互。在运行脚本之前,同时为 SSO 域中的所有 vCenter Server 和 Platform Service Controller 创建脱机快照。
注意事项:
- 每个 SSO 域只能运行该脚本一次。
- 如果您现场设置了 Horizon View,请参见 连接服务器无法接受 vCenter 指纹,并出现错误“识别服务器有效性时出错”(67701)。
故障确认点
C:\ProgramData\VMware\vCenterSerer\logs\vwmware-vpx
解决
- 从本文中下载附件“ fixsts.ps1 ”,并将其上传到C:\Temp(在C:\新建一个Temp文件夹)或任何其他可用文件夹中受影响的 PSC 或具有嵌入式 PSC 的 VC。
- 如果 vCenter Server 版本低于 6.7 Update 3g,请从本文下载随附的“ vmware-identity-sso-config67u3g.jar ”,并将其上传到受影响的 PSC 或具有嵌入式 PSC 的 VC(与步骤 1 位于同一文件夹中)。
- 以管理员身份打开 Powershell 会话(开始>搜索> Powershell >以管理员身份运行)。
- 使用 cd " path to file "将目录更改为您上传文件的文件夹。
- 运行./fixsts.ps1。
- 重新启动 SSO 域中所有 vCenter 和/或 PSC 上的服务。
在下C:\Program Files\VMware\vCenter Server\bin执行一下命令
#service-control --stop --all
#service-control --start --all
- 使用证书管理器替换您可能拥有的任何其他过期证书,如如何使用 vSphere 证书管理器替换 SSL 证书中所示。
以下一行可以确定 Windows vCenter Server 的其他过期证书,该命令需要在 PowerShell 中执行:
$VCInstallHome = [System.Environment]::ExpandEnvironmentVariables("%VMWARE_CIS_HOME%");foreach ($STORE in & "$VCInstallHome\vmafdd\vecs-cli" 存储列表){写入主机存储:$STORE;& "$ VCInstallHome\vmafdd\vecs-cli" 条目列表 --store $STORE --text | findstr /C:"Alias" /C:"Not After"}
注意: 如果替换了计算机 SSL 或 VMCA 根证书,则需要重新注册第二方解决方案,例如 NSX、SRM 和 vSphere Replication。
注意:如果您在没有网关的情况下使用 HLM(混合链接模式),则需要在执行此过程后将证书从云重新同步到本地。
该脚本将询问 SSO 管理员密码,然后继续重新生成和替换 STS 证书。
这是成功输出的示例
生成新的 STS 证书
状态:成功
使用配置文件:C:\Program Files\VMware\vCenter Server\vmcad\certool.cfg
状态:成功
用户 DN 为:cn=administrator,cn=users, dc=vsphere,dc=local
已成功删除 cn=TrustedCertChain-1,cn=TrustedCertificateChains,cn=vsphere.local,cn=Tenants,cn=IdentityManager,cn=Services,dc=vsphere,dc=local
已成功删除 cn=TenantCredential-1,cn=vsphere.local,cn=Tenants,cn=IdentityManager,cn=Services,dc=vsphere,dc=local
vCenter Server 版本为 6.7.0.31555 内部版本 16046470
所有 STS 租户分支均已删除!
重新创建 STS 租户
SLF4J:类路径包含多个 SLF4J 绑定。
SLF4J:在 [jar:file:/C:/Program%20Files/VMware/vCenter%20Server/VMware%20Identity%20Services/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder 中找到绑定.class]
SLF4J:在 [jar:file:/C:/Program%20Files/VMware/vCenter%20Server/VMware%20Identity%20Services/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/ 中找到绑定StaticLoggerBinder.class]
SLF4J:在 [jar:file:/C:/ProgramData/VMware/vCenterServer/runtime/VMwareSTSService/webapps/ROOT/WEB-INF/lib/log4j-slf4j-impl-2.11.2.jar!/org/slf4j 中找到绑定/impl/StaticLoggerBinder.class]
SLF4J:在 [jar:file:/C:/ProgramData/VMware/vCenterServer/runtime/VMwareSTSService/webapps/ROOT/WEB-INF/lib/slf4j-log4j12-1.7.26.jar 中找到绑定!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J:请参阅 http://www.slf4j.org/codes.html#multiple_bindings 了解说明。
STS证书替换成功!!,请重新启动服务
由于STS证书已替换,您可能需要重新注册外部解决方案(SRM、NSX等)