之前帮客户处理了一个因证书过期导致 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 证书)。

openssl x509 -in /etc/vmware-ssoykeys/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 证书时间过期前的时间。

tools.syncTime = "FALSE"
time.synchronize.continue = "FALSE"
time.synchronize.restore = "FALSE"
time.synchronize.resume.disk = "FALSE"
time.synchronize.shrink = "FALSE"
time.synchronize.tools.startup = "FALSE"
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)创建顶级目录以保存新证书并确人该目录的位置。

mkdir newsts
cd newsts
pwd
#resulting output: /root/newst

2)将 certool.cfg 文件复制到新目录中。

cp /usr/lib/vmware-vmca/share/config/certool.cfg /root/newsts

3)打开 certool.cfg 文件的副本并进行编辑,修改为本地 Platform Services Controller 的 IP 地址和主机名。国家/地区为必填字段且必须是两个字符,如以下示例所示。

#
# Template file for a CSR request
# # Country is needed and has to be 2 characters
Country = US
Name = STS
Organization = ExampleInc
OrgUnit = ExampleInc Dev
State = Indiana
Locality = Indianapolis
IPAddress = 10.0.1.32
Email = chen@exampleinc.com
Hostname = homecenter.exampleinc.local

4)生成密钥。

/usr/lib/vmware-vmca/bin/certool --server localhost --genkey --privkey=/root/newsts/sts.key --pubkey=/root/newsts/sts.pub

5)生成证书。

/usr/lib/vmware-vmca/bin/certool --gencert --cert=/root/newsts/newsts.cer --privkey=/root/newsts/sts.key --config=/root/newsts/certool.cfg

6)将证书转换为 PK12 格式。

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)。

/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

/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 组件注册目录。

cd /etc/vmware-sso/register-hooks.d

2)运行下面命令注销 vCenter Inventory Service  组件。注意 vCenter Server 的地址和用户名密码填入自己的。

./02-inventoryservice --mode uninstall --ls-server https://<FQDN of VCVA>:7444/lookupservice/sdk --user administrator@vsphere.local --password <Password>

3)如果命令执行成功,则会输出类似于下面的内容。

======
Intializing registration provider...
Getting SSL certificates for <FQDN of VCVA> :7444/lookupservice/sdk
Service with id "local:3576d0a7-e3db-4857-b0c1-9e289f95aa9c" is successfully unregistered
Return code is: Success
Intializing registration provider...
Getting SSL certificates for <FQDN of VCVA> :7444/lookupservice/sdk
Successfully deleted authenticated user
Return code is: Success
======
  • 重新注册 vCenter Inventory Service 组件

1)停止 vCenter Inventory Service 组件服务,备份数据库并修改数据库。

service vmware-inventoryservice stop
mv /storage/db/inventoryservice/data /storage/db/inventoryservice/data.old
/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 组件服务。

service vmware-inventoryservice start

3)将 vCenter Inventory Service 组件服务重新注册到 vCenter Server。注意 vCenter Server 的地址填入自己的。

/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 组件服务。

service vmware-vpxd restart

完成以上操作后,vCenter Server 连接使用正常。

【VMware vCenter】VMware vCenter Server(VCSA) 5.5 版本证书过期问题处理过程。的更多相关文章

  1. VMware vSphere之vCenter

    1.vCenter是什么? vCenter Server 是 vSphere管理员使用的主要管理工具,首先,通过它可实现对数据中心所有主机的单点控制,也就是提供集中式管理.其次,提供基本的基础结构操作 ...

  2. VMware vCloud与Zend Server实现PHP应用程序自动化交付

    在巴塞罗那2013年VMworld大会上,开发商VMware公司和zend公司在云管理市场上大放异彩.两家公司的产品VMware vCloud和Zend Server组合,实现了PHP程序自动化交付. ...

  3. Vmware 中安装 Ubuntu Server (或者ubuntu 以文本界面登陆时) 分辨率无法全屏问题

    Vmware 中安装 Ubuntu Server/Ubuntu 分辨率,无法全屏问题 需要更改grub设置 在终端或者文本界面按下列步骤进行设置: 第一步: 输入命令 sudo vim /etc/de ...

  4. 虚拟机Vmware成功安装Ubuntu Server 16.04中文版

    最近想在Linux下学习Python的爬虫开发技术,经过认真考虑优先选择在在Ubuntu环境下进行学习Python的开发,虽然Ubuntu Server 16.04 LTS版本已经集成了Python ...

  5. 如何在VMware Workstation11的Windows Server 2008 R2中安装XAMPP?

    我在VMware Workstation11的Windows Server 2008 R2打算安装XAMPP,但是总是有问题,经过两天的不懈努力,终于实现了,下面我具体说一说我遇到的问题和解决方法! ...

  6. 查看SQL Server多实例的版本

    通过 select @@version 查看当前的 SQL Server 安装的版本: 结果返回的是 SQL Server 2008 R2 (SP1),可安装的明明是 SQL Server 2012  ...

  7. SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程 'sys.sp_OACreate' 的访问

    sqlserver2008导入excel到数据库的时候报错: SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程 'sys.sp_OACreate' ...

  8. SQL Server 2012 数据库各个版本功能对比

    作为这篇SQL SERVER 2008数据库各版本功能对比 的姊妹篇,就写点SQL Server 2012 各个版本的区别以及物理以及逻辑上的限制. 个部分来分http://technet.micro ...

  9. SQL Server 2008 R2 的版本和组件

    SQL Server 2008 R2 的版本和组件 SQL Server 2008 R2   其他版本 SQL Server 2008 SQL Server 2005 SQL Server 2012 ...

  10. Sql Server 2008开发版(Developer Edition)过期升级企业版(Enterprise Edition)失败后安装学习版(Express Edition)

    最近一个多月,甚是悠哉,无事可做.上线的网站系统也没接到客户的反馈,反而觉得无聊之极了.上周五早上,一上QQ,就收到客户发来消息,管理平台无法登陆了.心里一惊,立马开始查找故障原因.翻看了系统日志,提 ...

随机推荐

  1. Docker 必知必会3----使用自己制作的镜像

    前面的两篇文章分别讲了,docker的基础概念,设计思路以及docker的基本操作.感兴趣的同学可以查阅: https://www.cnblogs.com/jilodream/p/18177695ht ...

  2. NETCore中实现一个轻量无负担的极简任务调度ScheduleTask

    至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简 ...

  3. 一文搞懂docker容器基础:docker镜像管理,docker容器管理

    目录 一.系统环境 二.docker 2.1 Docker 概述 2.2 Docker 平台 2.3 我可以使用 Docker 做什么? 2.3.1 快速.一致地交付您的应用程序 2.3.2 响应式部 ...

  4. 关于MySQL数据库大字符串存取 类型选择

    摘自:https://blog.csdn.net/weixin_40485506/article/details/83588169 关于MySQL数据库存储大字符串类型长度 根据所要存取字符长度及My ...

  5. c#事件的实际应用场景

    最简单的定义事件的语法 public event Action<bool> Refreash; 先介绍这个Action 这个Action是委托的快速实现方式,我用.net framewor ...

  6. Vue3.0极速入门(一) - 环境安装&新建项目

    Vue介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只 ...

  7. IPsecVPN 服务器一键安装脚本

    IPsec VPN 服务器一键安装脚本 使用 Linux 脚本一键快速搭建自己的 IPsec VPN 服务器.支持 IPsec/L2TP, Cisco IPsec 和 IKEv2 协议.你只需提供自己 ...

  8. NOIP模拟81

    T1 语言 解题思路 模拟即可,对于一个合法的句子直接判断每一个前缀和每一个后缀是否是合法的名词词组. 然后枚举动词的位置判断前后两段是否合法就好了. code #include<bits/st ...

  9. Dva.js 快速上手指南

    先说些废话 最近在开发React技术栈的项目产品,对于数据状态的管理使用了Dva.js,作为一个资深的ow玩家,我看到这个名字第一反应就是----这不是ow里的一个女英雄吗?仔细阅读了官方文档之后,发 ...

  10. echarts做饼图

    今天记录下echarts做饼图 父组件 <el-card style="height:600px ;margin-top:20px" v-loading="card ...