在虚拟化平台运维中,证书管理往往是最容易被忽视却又可能导致严重后果的环节。特别是vSphere环境中的STS(Security Token Service)证书,其有效期问题曾让不少运维团队在凌晨接到紧急告警。不同于常规HTTPS证书,STS证书直接关系到vCenter的身份验证核心功能,一旦过期将导致整个管理平台瘫痪。
vSphere平台的证书体系远比表面看到的复杂。许多管理员只关注浏览器中显示的HTTPS证书,却忽略了底层服务的认证机制。实际上,一个完整的vCenter Server包含多达17种不同类型的证书,而STS证书正是其中最关键的组件之一。
STS证书是安全令牌服务的签名凭证,负责:
当用户尝试登录vCenter时,认证流程大致如下:
bash复制用户凭证 → SSO服务 → STS签名 → 令牌返回 → 访问控制
不同vSphere版本的证书策略存在显著差异:
| 版本类型 | 默认证书有效期 | 影响范围 |
|---|---|---|
| 6.5全新安装 | 2年 | STS、VMCA等核心证书 |
| 6.5升级部署 | 10年 | 保留原有效期策略 |
| 6.7U3g前版本 | 2年 | 仅影响STS证书 |
| 6.7U3g后版本 | 10年 | 全面采用长期有效期 |
关键提示:通过Web界面查看到的证书警告通常指向常规服务证书,而非STS证书。这是许多管理员误判风险的主要原因。
等待告警出现已经为时已晚。我们推荐以下两种经过验证的检测方案,应纳入季度检查清单。
VMware官方提供的checksts.py是最可靠的检测工具,具体操作流程:
bash复制chmod +x /tmp/checksts.py
python /tmp/checksts.py
典型输出示例:
code复制Checking STS certificate validity...
Not Before: Aug 15 00:00:00 2021 GMT
Not After : Aug 15 23:59:59 2023 GMT
Days Remaining: 45
Status: Certificate expires soon!
对于需要更多证书细节的场景,VMware的vecs-cli工具能提供证书存储级的洞察:
bash复制/usr/lib/vmware-vmafd/bin/vecs-cli entry list --store vpxd-extension --text | grep -A5 "STS"
输出关键字段解析:
Alias:证书标识名称Not Before:生效起始时间Not After:绝对过期时间Public Key:密钥算法类型检测到即将过期的STS证书后,应根据不同版本采取针对性续订方案。
特别注意:在负载均衡配置的多PSC环境中,需对所有节点执行相同操作
6.7版本对证书管理界面进行了重构:
常见问题处理:
bash复制service-control --stop vmware-sts-idmd
service-control --start vmware-sts-idmd
当STS证书已经过期导致无法登录时,需要采用更复杂的恢复手段。以下流程需要在vCenter主机本地执行。
bash复制chmod +x /tmp/fixsts.sh
sed -i 's/\r$//' /tmp/fixsts.sh # 处理Windows换行符问题
执行前必须完成的准备工作:
运行修复脚本:
bash复制./fixsts.sh
脚本执行成功后,需要按顺序重启服务:
bash复制service-control --stop --all
service-control --start --all
验证证书状态的最可靠方法:
bash复制for store in $(vecs-cli store list); do
echo "检查存储库: $store";
vecs-cli entry list --store $store --text | grep -E "Alias|Not After";
done
临时修复只是治标,我们需要建立系统性的防护体系。
将STS证书检查集成到现有监控平台:
python复制# 示例:Nagios插件代码片段
import ssl, socket
from datetime import datetime
cert = ssl.get_server_certificate(('vcenter.example.com', 443))
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
exp_date = x509.get_notAfter().decode('utf-8')
days_left = (datetime.strptime(exp_date, '%Y%m%d%H%M%SZ') - datetime.now()).days
建议将以下节点纳入年度运维计划:
在最近一次为客户实施的vSphere健康检查中,我们发现三套环境中有两套的STS证书剩余有效期不足60天。通过建立这种预防性维护机制,成功避免了可能影响数百台虚拟机的服务中断事故。