作为企业级产品,VMware所有产品都是要求通过Https访问的,并且产品之间通讯也采用TLS通讯。VMware产品默认采用自签名证书,每次使用浏览器(Firefox可以添加例外,Chrome每次都有提示)打开系统都会增加“两次”跳过验证的点击,我们需要解决这个影响用户体验的证书问题。
另外,不仅仅是VMware的产品,还包括其他的企业级产品也存在相同的问题。
所以,今天我将替换vCenter、ESXi和NSX-T的证书,解决证书警告和信任难题。
企业根CA和中间CA的搭建,请参考[企业CA系列一]搭建企业根CA和中间CA
警告:一定要预先在测试环境进行验证,并考虑好相关联的系统证书信任问题!
警告:强烈建议先在测试环境进行验证,并考虑好相关联的系统证书信任问题!
VMware vCenter证书管理介绍
证书是驱动TLS加密的关键组件,TLS加密保护了与vSphere之间的所有网络通信。在vCenter Server7.0版本简化了证书的管理,在保障安全性的同时,降低了维护难度。
VMware vSphere vCenter Server Appliance (简称为VCSA)是一个基于Linux系统的虚拟应用,包含了PSC(Platform Service Controller)、Postgresql数据库的的系列服务。VMware Certificate Authority(简称VMCA)就是其中不可或缺的一员。vCenter Server 核心的身份认证服务包括以下3个组件:
- VMCA,VMware证书管理服务
- VMAFD,VMware Authentication Framework Daemon
- VMDIR,VMware Directory Service,目录服务
VMware vCenter Server证书管理模式
vSphere 7.0的证书管理经历了几个版本,现在主要有四种方法来管理证书:
- 完全托管模式:在第一次安装vCenter Server时,系统将使用新的根(Root)CA证书初始化VMCA,并使用VMCA管理集群内的证书(保护ESXi之间通讯和vCenter和ESXi之间通讯)。我们可以通过vCenter页面下载VMCA根证书,并添加到客户端电脑的"企业受信任根证书颁发机构"中,也获得信任。
- 混合模式:很多时候我们无法让使用者添加VMCA根CA证书到受信任中,在混合模式下,我们可以单独替换vSphere Client证书,改善用户在访问vCenter Web Client时的体验。但是,vSphere管理员仍然需要添加VMCA到本地"企业受信任根证书颁发机构"中,以获得ESXi主机连接信任。
- 中间CA模式:此模式下,VMCA可以作为企业根(Root)CA的中间CA,vCenter Server依然通过VMCA管理内部使用的证书,由于VMCA由企业根(Root)CA签署,用户只需将企业根(Root)CA添加到"企业受信任的根证书颁发机构"中,即可实现vCenter、ESXi的证书信任。
- 完全自定义模式:此模式下,不使用VMCA,人工安装和管理所有vSphere集群中的证书,非常耗时、耗力。
从以上四种模式可以看出,"混合模式"是一个均衡的选择,也是官方推荐的方案,"中间CA模式"体验更好,但一定要管理好秘钥,避免安全事件的发生。
同时,我们也要考虑vSphere7的的Kubernetes解决方案,其也是通过VMCA签发的证书,如果使用vSphere With Kubernetes解决方案,推荐采用"中间CA模式"。
本篇我们采用混合模式。在下一篇 [企业CA系列三]替换vCenter和ESXi证书(中间CA模式) 中,我们采用为VMCA签发中间CA证书,并通过VMCA自动管理vSphere7.0环境证书。请根据根据实际需求选择证书管理方式。
前提条件和操作步骤概述
混合模式非常简单,仅需要我们为vSphere Web Client签发证书,并进行替换,请参考 [企业CA系列一] 搭建企业CA;
- 搭建企业CA;
- 使用企业中间CA签发vCenter Server和ESXi证书;
- 替换vCenter Server的机器证书为企业中间CA签发证书;
- (可选)替换ESXi主机证书为企业中间CA签发证书;
- (可选)修改ESXi证书管理策略;
提示1:vSphere 7.0环境测试,vSphere6.x版本需要参考官方KB进行操作; 提示2:替换证书后,相关与vCenter的连接需要重新配置,已信任新证书;例如:虚拟化备份系统会连接失败。 提示3:强烈建议在测试环境测试后,再进行生产部署;
准备VMware Intermediate Root CA证书配置文件
正如文章前面提高的,直接使用Root CA签发证书是非常危险的,因为私钥有可能被泄漏出去(签发证书时需要使用私钥),所以强烈推荐创建中间CA,并通过中间CA签发证书。
这里我们为VMware的产品证书准备一个中间CA,用于VMware相关产品的证书签发。
/root/intermediate/vmware/config.json相关配置
- "usages": 描述此证书具备哪些能力;
- "expiry": 描述证书有效期;
- "ca_constraint": 声明此证书是一个CA证书,能够签发证书。
/root/intermediate/vmware/vmware-ca-csr.json相关配置
- "CN": 通用名,一般出现在证书的颁发机构中,需要清晰描述,且不能与根CA证书相同;
- "key": 加密算法,VMware产品使用RSA 2048;
- "names": 指定证书相关属性信息;
- "C": 两位国家代码
- "L": 城市
- "O": 组织
- "OU": 组织单元
- "ST": 省
cd /root/intermediate/vmware
cat <<EOF > /root/intermediate/vmware/config.json
{
"signing": {
"default": {
"usages": ["digital signature","key encipherment","cert sign","crl sign","signing","server auth","client auth"],
"expiry": "175200h",
"ca_constraint": {"is_ca": true, "max_path_len": 0, "max_path_len_zero": true}
}
}
}
EOF
cat <<EOF > /root/intermediate/vmware/vmware-ca-csr.json
{
"CN": "VMware Intermediate CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Changchun",
"O": "VMware",
"OU": "DevOps",
"ST": "Jilin"
}
],
"ca": {
"expiry": "175200h"
}
}
EOF
cfssl genkey -initca vmware-ca-csr.json | cfssljson -bare vmware-intermediate-ca
cfssl sign -ca ../../ca/root-ca.pem -ca-key ../../ca/root-ca-key.pem --config config.json vmware-intermediate-ca.csr | cfssljson -bare vmware-intermediate-ca
cat vmware-intermediate-ca.pem ../../ca/root-ca.pem >> vmware-intermediate-ca-bundle.pem
现在 /root/intermediate/vmware/ 目录下应该已经存在了中间 CA的证书和私钥:
- vmware-intermediate-ca.pem
- vmware-intermediate-ca-key.pem
- vmware-intermediate-ca-bundle.pem (根证书链,后续使用)
根(Root)CA签发完成后,一定要保留好根(Root)CA的私钥。切记!切记!切记!
通过中间CA为vSphere Web Client签发证书
正如前面介绍的,混合模式下,仅需要为vCenter Server 的vSphere Web Client替换签名证书,保证连接vCenter Server控制台的使用。
mgmt-vc-csr.json配置文件说明:
- CN": "mgmt-nsxma.corp.local"(修改为NSX-T域名)
- "hosts": ["127.0.0.1","mgmt-vc.corp.local","192.168.100.10"] (修改为NSX-T域名和IP地址)
mkdir -p /root/certs/mgmt-vc
cd /root/certs/mgmt-vc
cat <<EOF > /root/certs/mgmt-vc/config.json
{
"signing": {
"default": {
"usages": ["digital signature","key encipherment","signing","server auth"],
"expiry": "87600h"
}
}
}
EOF
cat <<EOF > /root/certs/mgmt-vc/mgmt-vc-csr.json
{
"CN": "mgmt-vc.corp.local",
"hosts": [
"127.0.0.1",
"mgmt-vc0.corp.local",
"192.168.100.10"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Changchun",
"O": "VMware",
"OU": "DevOps",
"ST": "Jilin"
}
]
}
cfssl gencert -ca=/root/intermediate/vmware/vmware-intermediate-ca.pem -ca-key=/root/intermediate/vmware/vmware-intermediate-ca-key.pem -config=config.json mgmt-vc-csr.json | cfssljson -bare mgmt-vc
现在 /root/certs/mgmt-vc 目录下应该已经存在了vCenter Server的证书和私钥:
- mgmt-vc.pem
- mgmt-vc-key.pem
- /root/intermediate/vmware/vmware-intermediate-ca-bundle.pem (根证书链,后续使用)
(可选)通过中间CA为ESXi系统签名证书
混合模式下,ESXi主机证书依然由VMCA管理,我们也可以为ESXi生成证书,并需要在修改ESXi主机的证书模式。 修改ESXi证书模式
提示:如果你后期修改使用VMCA自动管理证书,别忘记修改ESXi证书管理模式为默认。
mkdir /root/certs/dc01-esxi-01
cd /root/certs/dc01-esxi-01
cat <<EOF > /root/certs/dc01-esxi-01/config.json
{
"signing": {
"default": {
"usages": ["digital signature","key encipherment","signing","server auth"],
"expiry": "87600h"
}
}
}
EOF
cat <<EOF > /root/certs/dc01-esxi-01/dc01-esxi-01-csr.json
{
"CN": "dc01-esxi-01.corp.local",
"hosts": [
"127.0.0.1",
"dc01-esxi-01.corp.local",
"192.168.100.31"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Changchun",
"O": "VMware",
"OU": "DevOps",
"ST": "Jilin"
}
]
}
cfssl gencert -ca=/root/intermediate/corp/corp-intermediate-ca.pem -ca-key=/root/intermediate/corp/corp-intermediate-ca-key.pem -config=config.json dc01-esxi-01-csr.json | cfssljson -bare dc01-esxi-01
现在 /root/certs/dc01-esxi-01 目录下应该已经存在了ESXi主机的证书和私钥:
- dc01-esxi-01.pem
- dc01-esxi-01-key.pem
替换vSphere Web Client证书(混合模式)
- 登录vCenter Web Consle
- 进入 菜单->系统管理->证书管理
- "Machine_CERT"->操作->导入并替换证书-替换为外部CA证书
- "计算机SSL证书":/root/certs/mgmt-vc/mgmt-vc.pem
- "受信任的根证书链":/root/intermediate/vmware/vmware-intermediate-ca-bundle.pem
- "私钥":/root/certs/mgmt-vc/mgmt-vc-key.pem
- 等待vCenter Server重启完成
- 通过浏览器打开vCenter Web控制台,验证证书是否替换成功。
提示:只有在客户端计算机已添加企业(Root)CA到"企业受信任根证书颁发机构"后,浏览器才会信任。
(可选)替换ESXi主机证书
- 拷贝dc01-esxi-01.pem文件内容覆盖对应ESXi主机的rui.crt文件
- 拷贝dc01-esxi-01-key.pem文件内容覆盖对应ESXi主机的rui.key文件
- 通过DCUI控制台,重启“Restart Management Agents”
- 通过浏览器打开ESXi Host Web控制台,验证证书是否替换成功。
/etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.key
提示1:如果此时您尚未在客户端电脑添加企业CA根证书信任,那么浏览器依然存在警告。 提示2:更改ESXi证书管理模式
添加企业根证书到Windows/Linux/MacOS的“受信任根证书颁发机构”
参考[企业CA系列一]搭建企业根CA和中间CA
完成
至此,我们完成了vCenter Server和和ESXi证书替换工作,从vSphere的证书管理机制可以看出来,VMware在安全方案做的非常到位,一方面保证安全,另一方面提高易用性。