【VMware vCenter】VMware vCenter Server(VCSA) 5.5 版本证书过期问题处理 ...

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

之前帮客户处理了一个因证书过期导致 vCenter Server 无法登录的问题,在此记载一下,由于时间已往有点久了,可能会有些地方形貌的不是很清晰,所以就当作参考就行。客户情况是一个非常老的 vCenter Server 5.5 版本并基于 Linux 版本的 VCSA (其时这个版本还有基于 Windows 的,注意区别),早期可以使用基于 C# 开发的 Windows 客户端进行访问和管理 vCenter Server,当然这个版本也支持基于 Adobe Flex (也就是Flash)的 vSphere Web Client 并通过网页进行访问管理。
办理过程比力麻烦,牵涉到证书的替换和服务的重新注册,因此建议你在实行这些操作时,请一定做好快照和备份。自 vCenter Server 6.x 及以后,VMware 出了许多脚本工具可以很方便的处理证书过期等问题,可以参看以下 KB 知识库,但是在这之前的版本可就没那么方便了!
由于无法登录 vCenter Server ,所以只能通过客户端工具连接到运行 vCenter 的 ESXi 主机上,并通过控制台查看 vCenter 的启动状态。经控制台查看,vCenter 的运行状态似乎是正常的,并且可以通过 SSH 以 ROOT 账户登录到 vCenter 的 Shell 命令行,同时可以访问 vCenter 的 VAMI 管理后台(https://ip-or-fqdn:5480)并查看服务状态,似乎也没有什么异常情况。
其时第不停觉觉得是 vCenter Server 的什么证书过期了导致的,由于这个版本的 vCenter Server 5.5 到现在已颠末去这么久了,可能证书什么的应该要到期了,所以想着怎么查看这个版本的证书是否已到期,但是由于没法登录 vCenter Server,肯定没法通过网页查看,于是开始进行以下排查并故障处理。
1、SSH 登录到 vCenter,使用下面命令查看证书,发现确实有证书已颠末期(下图其实是 STS 证书)。
  1. openssl x509 -in /etc/vmware-sso/keys/ssoserversign.crt -noout -dates
复制代码

 
2、5.5 版本 vCenter Server 的 SSL 证书可以在 VAMI 管理后台开启证书主动更新功能,无必要手动进行更新,只必要登录 VAMI 管理后台开启后,当 vCenter Server 重启系统后会主动去更新。具体在 VAMI 管理后台的那个选项卡已经不记得了,不过 VAMI 后台页面的功能很少,应该很容易找到。
 
3、vCenter Server 勾选证书主动更新功能后,将 vCenter 重启,你可以使用 Shell 重启或者在 VAMI 后台或者直接通过 ESXi 控制台都行。其实,在重启 vCenter Server 的过程中,也能看到是由于证书过期造成的vCenter 故障,通过 ESXi 打开 vCenter 虚拟机的控制台并查看启动过程,可以看到启动过程中有一些报错,具体报错信息不太记得了,大概是启动某个并配置某个服务的时候,但是由于检测到证书已颠末期了,所以跳过了该配置。当vCenter Server 虚拟机重启后,依然无法使用客户端进行连接,由于只是更新了 vCenter Server 的 SSL 证书,上面图片中的证书其实是 STS  证书,还必要对该证书进行更新。
注:vCenter VAMI 管理后台开启 SSL 证书主动生成后,必要把它关闭掉,否则每次重启 vCenter 都会重新生成新证书。
 
4、首先,5.5 版本的 vCenter Server 的 STS 证书我是通过 vSphere Web Client 进行更新的(可以见下图),我没有找到通过命令行进行更新的方法,所以现在要更新这个证书面临着两个问题,第一个问题是 STS 证书必须使用命令行手动生成新的证书文件;第二个是由于现在 vCenter Server 服务有问题无法登录到 vSphere Web Client。
 
5、先说第二个问题, 由于 vCenter Server 证书过期问题导致服务也有问题无法登录 vSphere Web Client。有一个小技巧可以临时处理这个问题,就是将 vCenter Server 的系统时间调成证书过期之间的时间,然后重新启动 vCenter Server 让服务启动正常,然后登录到 vSphere Web Client 然后使用手动生成的新的 STS 证书完成替换。
想临时处理这个问题,也有许多步调。首先,第一步,STS 证书的管理必须要使用 SSO 管理员用户(administrator@vsphere.local)进行更新,所以你必要进入 VAMI 管理后台去启动 vCenter Server 的 SSO 用户,这个比力简单,在后台启用并配置 SSO 用户的暗码即可,如果之前你已经在使用 SSO 用户了那就跳过这一步。
第二步,由于当前 vCenter Server 的系统时间已经在 STS 证书过期日期之后,所以可以修改 vCenter Server 的系统时间为 STS 证书过期前的时间临时让其服务正常运行并可以进入到 vSphere Web Client。颠末多种方式对时间的修改(什么 NTP 时钟服务器同步、虚拟机系统时间同步了硬件时间、虚拟机系统时间由 VM-Tools 同步),发现 5.5 的 vCenter Server 的系统时间都没有改过来,后来通过在 vCenter Server 虚拟机的 VMX 配置文件里添加以下参数后终于成功修改,以下参数可以锁定 vCenter Server 虚拟机系统启动的时间,rtc.startTime 后面的值为时间戳,你可以使用 时间戳(Unix timestamp)转换工具 修改为 STS 证书时间过期前的时间。
  1. tools.syncTime = "FALSE"
  2. time.synchronize.continue = "FALSE"
  3. time.synchronize.restore = "FALSE"
  4. time.synchronize.resume.disk = "FALSE"
  5. time.synchronize.shrink = "FALSE"
  6. time.synchronize.tools.startup = "FALSE"
  7. rtc.startTime = 1325376000
复制代码
使用客户端工具登录到 ESXi 并导航到 vCenter Server 虚拟机所使用的存储目录,将 VMX 配置文件下载到本地(注意备份),将上面的修改后的配置参数添加到 VMX 配置文件中并保存,再上传到 vCenter Server 虚拟机的存储文件夹中覆盖原来的配置文件。重新启动 vCenter Server 后,服务启动过程无报错并运行正常。
注:由于修改了主机 vCenter 的 VMX 配置文件,后面更新完 STS 证书后,在重新启动 vCenter Server 之前必要重新把原来的配置文件还原回去,否则每次 vCenter 启动都会继续配置文件中的时间。
通过修改 vCenter Server 的时间,vCenter 系统服务正常启动后,可以正常登录到vSphere Web Client。注意,由于访问必要使用 Flash,必要客户端安装 vCenter Server 所支持的 Flash 版本并使用支持的浏览器,否则将无法访问。 通过 SSO 管理员用户登录到 vCenter Server 后,导航到系统管理->Single Sign-On->配置->证书,这里可以看到 STS 证书已过期。

 
6、现在回到第一个问题。STS 证书的更新可以在上图中的位置选择从本地导入证书文件并更新,不过必要通过命令手动生成新的 STS 证书并下载到本地。具体手动生成 STS 证书的方法可以参考 VMware vSphere 6.5 产物文档中的方法。
SSH 登录到 vCenter Server。
1)创建顶级目录以保存新证书并确认该目录的位置。
  1. mkdir newsts
  2. cd newsts
  3. pwd
  4. #resulting output: /root/newst
复制代码
2)将 certool.cfg 文件复制到新目录中。
  1. cp /usr/lib/vmware-vmca/share/config/certool.cfg /root/newsts
复制代码
3)打开 certool.cfg 文件的副本并进行编辑,修改为本地 Platform Services Controller 的 IP 地址和主机名。国家/地区为必填字段且必须是两个字符,如以下示例所示。
  1. #
  2. # Template file for a CSR request
  3. #
  4. # Country is needed and has to be 2 characters
  5. Country = US
  6. Name = STS
  7. Organization = ExampleInc
  8. OrgUnit = ExampleInc Dev
  9. State = Indiana
  10. Locality = Indianapolis
  11. IPAddress = 10.0.1.32
  12. Email = chen@exampleinc.com
  13. Hostname = homecenter.exampleinc.local
复制代码
4)生成密钥。
  1. /usr/lib/vmware-vmca/bin/certool --server localhost --genkey --privkey=/root/newsts/sts.key --pubkey=/root/newsts/sts.pub
复制代码
5)生成证书。
  1. /usr/lib/vmware-vmca/bin/certool --gencert --cert=/root/newsts/newsts.cer --privkey=/root/newsts/sts.key --config=/root/newsts/certool.cfg
复制代码
6)将证书转换为 PK12 格式。
  1. openssl pkcs12 -export -in /root/newsts/newsts.cer -inkey /root/newsts/sts.key -certfile /var/lib/vmware/vmca/root.cer -name "newstssigning" -passout pass:testpassword -out newsts.p12
复制代码
7)将证书添加到 Java 密钥库 (JKS)。
  1. /usr/java/jre-vmware/bin/keytool -v -importkeystore -srckeystore newsts.p12 -srcstoretype pkcs12 -srcstorepass testpassword -srcalias newstssigning -destkeystore root-trust.jks -deststoretype JKS -deststorepass testpassword -destkeypass testpassword
  2. /usr/java/jre-vmware/bin/keytool -v -importcert -keystore root-trust.jks -deststoretype JKS -storepass testpassword -keypass testpassword -file /var/lib/vmware/vmca/root.cer -alias root-ca
复制代码
使用 keytool -help 获取全部可用命令的列表。
8)出现提示时,键入 Yes 接受证书以将其添加到密钥库。
最后将生成的 STS 证书文件(root-trust.jks)通过 SFTP 下载到本地,然后参考下面的方法,将 STS 证书文件上传更新并重新启动 vCenter Server。注意上面证书设置的暗码(testpassword),导入的时候可能必要验证。

 
7、通过修复 STS 证书过期问题后,在正确的时间上正常启动 vCenter Server 服务过程中没有相关错误,通过客户端也能正常访问 vCenter Server了。但是,使用查询功能时出现“无法连接到 Web 服务以实行查询。请验证 https://ip:10443 上是否正在运行“VMware VirtualCenter Management Webservices”服务”的错误提示。

vCenter Server 在之前主动更新 SSL 证书后,如 vCenter Inventory Service 等组件服务没有得到更新,可以通过 VMware KB 2054085 查看 vCenter Server 5.x 具有的组件服务列表以及服务如何停止、启动和重启。必要参考 VMware KB 2094888 取消注册服务,并按照 VMware KB 2037952 重新向 vCenter 注册服务。
SSH 登录到 vCenter Server。

  • 注销 vCenter Inventory Service 组件
1)进入到 register-hooks 组件注册目录。
  1. cd /etc/vmware-sso/register-hooks.d
复制代码
2)运行下面命令注销 vCenter Inventory Service  组件。注意 vCenter Server 的地址和用户名暗码填入自己的。
  1. ./02-inventoryservice --mode uninstall --ls-server https://<FQDN of VCVA>:7444/lookupservice/sdk --user administrator@vsphere.local --password <Password>
复制代码
3)如果命令实行成功,则会输出类似于下面的内容。
  1. ======
  2. Intializing registration provider...
  3. Getting SSL certificates for <FQDN of VCVA> :7444/lookupservice/sdk
  4. Service with id "local:3576d0a7-e3db-4857-b0c1-9e289f95aa9c" is successfully unregistered
  5. Return code is: Success
  6. Intializing registration provider...
  7. Getting SSL certificates for <FQDN of VCVA> :7444/lookupservice/sdk
  8. Successfully deleted authenticated user
  9. Return code is: Success
  10. ======
复制代码
 

  • 重新注册 vCenter Inventory Service 组件
1)停止 vCenter Inventory Service 组件服务,备份数据库并修改数据库。
  1. service vmware-inventoryservice stop
  2. mv /storage/db/inventoryservice/data /storage/db/inventoryservice/data.old
  3. /usr/lib/vmware-vpx/inventoryservice/scripts/ds-invoke.sh -Dvim.logdir=/var/log/vmware/vpx/inventoryservice com.vmware.vim.dataservices.CreateDb /storage/db/inventoryservice/data changeme default changeme
复制代码
2)启动 vCenter Inventory Service 组件服务。
  1. service vmware-inventoryservice start
复制代码
3)将 vCenter Inventory Service 组件服务重新注册到 vCenter Server。注意 vCenter Server 的地址填入自己的。
  1. /usr/lib/vmware-vpx/inventoryservice-registration/vcregtool.sh -Dvim.logdir=/var/log/vmware/vpx/inventoryservice-registration com.vmware.vim.dataservices.vcregtool.RegisterVC -action register -lookupserviceurl https://vcenter_fqdn:7444/lookupservice/sdk -isurl https://vcenter_fqdn:10443 -vcurl https://vcenter_fqdn/sdk/vimService -vccert /etc/vmware-vpx/ssl/rui.crt -vcprivkey /etc/vmware-vpx/ssl/rui.key -vcinstancecfg /etc/vmware-vpx/instance.cfg -vcendpointsdir /usr/lib/vmware-vpx/endpoints -vcextensionsdir /usr/lib/vmware-vpx/extensions
复制代码
4)重新启动 VMware VirtualCenter Server Service 组件服务。
  1. service vmware-vpxd restart
复制代码
 
完成以上操作后,vCenter Server 连接使用正常。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表