可以使用 CLI 将 VMCA 根证书替换为证书链中包括 VMCA 的第三方 CA 签名证书。从今往后,VMCA 生成的所有证书都将包括完整链。可以将现有证书替换为新生成的证书。

如果使用 VMCA 作为中间 CA 或使用自定义证书,复杂性可能会显著提高,安全可能会受到负面影响,运营风险可能会不必要地提高。有关管理 vSphere 环境内的证书的详细信息,请参见标题为“New Product Walkthrough - Hybrid vSphere SSL Certificate Replacement”的博客帖子,网址为 http://vmware.com/go/hybridvmca

使用 CLI 替换根证书(中间 CA)

将 VMCA 证书替换为自定义证书的第一步是生成 CSR 并发送要签名的 CSR。然后,使用 CLI 将签名证书作为根证书添加到 VMCA。

可以使用 Certificate Manager 实用程序或其他工具生成 CSR。CSR 必须满足以下要求:

  • 密钥大小:2048 位(最小长度)到 8192 位(最大长度)(PEM 编码)
  • PEM 格式。VMware 支持 PKCS8 和 PKCS1(RSA 密钥)。密钥添加到 VECS 后,会转换为 PKCS8。
  • x509 版本 3
  • 对于根证书,CA 扩展必须设置为 true,并且证书签名必须在要求列表中。例如:
    basicConstraints        = critical,CA:true
    keyUsage                = critical,digitalSignature,keyCertSign
  • 必须启用 CRL 签名。
  • 扩展密钥用法可以为空或包含服务器身份验证。
  • 对证书链的长度没有明确限制。VMCA 使用 OpenSSL 默认设置,即 10 个证书。
  • 不支持包含通配符或多个 DNS 名称的证书。
  • 不能创建 VMCA 的附属 CA。

    有关使用 Microsoft 证书颁发机构的示例,请参见 VMware 知识库文章《在 vSphere 6.x 中创建 Microsoft 证书颁发机构模板以创建 SSL 证书》,网址为 https://kb.vmware.com/s/article/2112009

注: vSphere 的 FIPS 证书仅验证大小为 2048 位和 3072 位的 RSA 密钥。
替换根证书时,VMCA 会验证以下证书属性:
  • 密钥大小:2048 位(最小值)到 8192 位(最大值)。
  • 密钥使用:证书签名
  • 基本限制:主体类型 CA

过程

  1. 生成 CSR 并将其发送给您的 CA。
    按照 CA 的说明进行操作。
  2. 准备包括签名的 VMCA 证书以及第三方 CA 或企业 CA 的完整 CA 链的证书文件。保存该文件,例如,另存为 rootca1.crt
    可以通过将 PEM 格式的所有 CA 证书复制到单个文件来完成此步骤。以 VMCA 根证书开头,并以根 CA PEM 证书结尾。例如:
    -----BEGIN CERTIFICATE-----
    <Certificate of VMCA>
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    <Certificate of intermediary CA>
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    <Certificate of Root CA>
    -----END CERTIFICATE-----
  3. 停止所有服务,启动处理证书创建、传播和存储的服务。
    service-control --stop --all
    service-control --start vmafdd
    service-control --start vmdird
    service-control --start vmcad
    
  4. 替换现有 VMCA 根 CA。
    certool --rootca --cert=rootca1.crt --privkey=root1.key
    运行此命令时,会执行以下操作:
    • 将新的自定义根证书添加到文件系统中的证书位置。
    • 将自定义根证书附加到 VECS 中的 TRUSTED_ROOTS 存储中(延迟后)。
    • 将自定义根证书附加到 vmdir(延迟后)。
  5. (可选) 要将更改传播到 vmdir(VMware Directory Service)的所有实例,请将新根证书发布到 vmdir,并提供每个文件的完整文件路径。
    例如,如果证书链中只有一个证书:
    dir-cli trustedcert publish --cert rootca1.crt
    如果证书链中有多个证书:
    dir-cli trustedcert publish --cert rootcal.crt --chain
    每 30 秒进行一次 vmdir 节点之间的复制。无需将根证书显式添加到 VECS,因为 VECS 会每 5 分钟轮询 vmdir 中的新根证书文件。
  6. (可选) 如有必要,可以强制刷新 VECS。
    vecs-cli force-refresh
  7. 重新启动所有服务。
    service-control --start --all

示例: 替换根证书

使用带 --rootca 选项的 certool 命令将 VMCA 根证书替换为自定义 CA 根证书。

/usr/lib/vmware-vmca/bin/certool --rootca --cert=<path>/root.pem -–privkey=<path>/root.key
运行此命令时,会执行以下操作:
  • 将新的自定义根证书添加到文件系统中的证书位置。
  • 将自定义根证书附加到 VECS 中的 TRUSTED_ROOTS 存储中。
  • 将自定义根证书添加到 vmdir。

下一步做什么

如果公司策略需要,可以从证书存储中移除原始的 VMCA 根证书。如果执行此操作,则必须替换 vCenter Single Sign-On 签名证书。请参见使用命令行替换 vCenter Server STS 证书

使用 CLI 替换计算机 SSL 证书(中间 CA)

从 CA 收到签名证书后,您可以使用 CLI 将其设置为 VMCA 根证书并替换所有计算机 SSL 证书。

这些步骤实际上与替换为使用 VMCA 作为证书颁发机构的证书的步骤相同。但是,在这种情况下,VMCA 会对整个链中的所有证书进行签名。

每台计算机都必须拥有可用于与其他服务进行安全通信的计算机 SSL 证书。当多个 vCenter Server 实例以增强型链接模式配置进行连接时,必须在每个节点上运行计算机 SSL 证书生成命令。

前提条件

对于每个计算机 SSL 证书,SubjectAltName 必须包含 DNS Name=<Machine FQDN>

过程

  1. 为需要新证书的每台计算机复制一份 certool.cfg
    certool.cfg 文件位于 /usr/lib/vmware-vmca/share/config/ 目录中。
  2. 编辑每台计算机的自定义配置文件以包括该计算机的 FQDN。
    对计算机的 IP 地址运行 NSLookup,以查看名称的 DNS 列表,并在文件的“主机名”字段中使用该名称。
  3. 传递刚自定义的配置文件为每个计算机生成公用/专用密钥文件对。
    例如:
    certool --genkey --privkey=machine1.priv --pubkey=machine1.pub
    certool --gencert --privkey=machine1.priv --cert machine42.crt --Name=Machine42_Cert --config machine1.cfg
  4. 停止所有服务,启动处理证书创建、传播和存储的服务。
    service-control --stop --all
    service-control --start vmafdd
    service-control --start vmdird
    service-control --start vmcad
    
  5. 将新证书添加到 VECS。
    所有计算机都需要本地证书存储中的新证书来通过 SSL 进行通信。首先删除现有条目,然后添加新条目。
    vecs-cli entry delete --store MACHINE_SSL_CERT --alias __MACHINE_CERT  
    vecs-cli entry create --store MACHINE_SSL_CERT --alias __MACHINE_CERT --cert machine1.cert
    --key machine1.priv
  6. 重新启动所有服务。
    service-control --start --all

示例: 替换计算机 SSL 证书(VMCA 为中间 CA)

  1. 为 SSL 证书创建配置文件,并在当前目录中将其保存为 ssl-config.cfg
    Country = US
    Name = vmca-<FQDN-example>
    Organization = VMware
    OrgUnit = VMware Engineering
    State = California 
    Locality = Palo Alto
    Hostname = <FQDN>
  2. 为计算机 SSL 证书生成密钥对。在包含以增强型链接模式配置连接的多个 vCenter Server 实例的部署中,在每个 vCenter Server 节点上运行以下命令。
    /usr/lib/vmware-vmca/bin/certool --genkey --privkey=ssl-key.priv --pubkey=ssl-key.pub
    

    将在当前目录中创建 ssl-key.privssl-key.pub 文件。

  3. 生成新的计算机 SSL 证书。此证书为 VMCA 签名证书。如果将 VMCA 根证书替换为自定义证书,则 VMCA 会对整个链中的所有证书进行签名。
    /usr/lib/vmware-vmca/bin/certool --gencert --cert=new-vmca-ssl.crt --privkey=ssl-key.priv --config=ssl-config.cfg

    将在当前目录中创建 new-vmca-ssl.crt 文件。

  4. (可选)列出 VECS 的内容。
    /usr/lib/vmware-vmafd/bin/vecs-cli store list
    • vCenter Server 中的输出示例:
      output (on vCenter):
      MACHINE_SSL_CERT
      TRUSTED_ROOTS
      TRUSTED_ROOT_CRLS
      machine
      vsphere-webclient
      vpxd
      vpxd-extension
      hvc
      data-encipherment
      APPLMGMT_PASSWORD
      SMS
      wcp
      KMS_ENCRYPTION
  5. 将 VECS 中的计算机 SSL 证书替换为新的计算机 SSL 证书。--store--alias 值必须与默认名称完全匹配。
    • 在每个 vCenter Server 上,运行以下命令以更新 MACHINE_SSL_CERT 存储中的计算机 SSL 证书。由于每个计算机具有不同的 FQDN,因此必须单独更新每个计算机的证书。
      /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store MACHINE_SSL_CERT --alias __MACHINE_CERT
      /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store MACHINE_SSL_CERT --alias __MACHINE_CERT --cert new-vmca-ssl.crt --key ssl-key.priv
      

使用 CLI 替换解决方案用户证书(中间 CA)

替换计算机 SSL 证书后,可以使用 CLI 替换解决方案用户证书。

许多 VMware 客户未替换解决方案用户证书。他们仅将计算机 SSL 证书替换为自定义证书。这种混合方法符合其安全团队的要求。
  • 证书位于代理后面或是自定义证书。
  • 未使用中间 CA。

替换每个 vCenter Server 系统上的计算机解决方案用户证书和解决方案用户证书。

注: 在大型部署中列出解决方案用户证书时, /usr/lib/vmware-vmafd/bin/dir-cli list 的输出包括所有节点的所有解决方案用户。运行 /usr/lib/vmware-vmafd/bin/vmafd-cli get-machine-id --server-name localhost 以查找每个主机的本地计算机 ID。每个解决方案用户名称均包括计算机 ID。

前提条件

每个解决方案用户证书必须具有不同的 Subject。例如,考虑包含解决方案用户名(如 vpxd)或其他唯一标识符。

过程

  1. 复制一份 certool.cfg,移除名称、IP 地址、DNS 名称和电子邮件字段,并重命名文件,例如,重命名为 sol_usr.cfg
    您可以通过命令行在生成过程中命名证书。解决方案用户不需要其他信息。如果保留默认信息,生成的证书可能会造成混淆。
  2. 传递刚自定义的配置文件为每个解决方案用户生成公用/专用密钥文件对和证书。
    例如:
    certool --genkey --privkey=vpxd.priv --pubkey=vpxd.pub
    certool --gencert --privkey=vpxd.priv --cert vpxd.crt --Name=VPXD_1 --config sol_usr.cfg
  3. 查找每个解决方案用户的名称。
    /usr/lib/vmware-vmafd/bin/dir-cli service list 
    
    可以使用替换证书时返回的唯一 ID。输入和输出可能显示如下。
    /usr/lib/vmware-vmafd/bin/dir-cli service list
    Enter password for [email protected]:
    1. machine-623bef28-0311-436e-b21f-6e0d39aa5179
    2. vsphere-webclient-623bef28-0311-436e-b21f-6e0d39aa5179
    3. vpxd-623bef28-0311-436e-b21f-6e0d39aa5179
    4. vpxd-extension-623bef28-0311-436e-b21f-6e0d39aa5179
    5. hvc-623bef28-0311-436e-b21f-6e0d39aa5179
    6. wcp-1cbe0a40-e4ce-4378-b5e7-9460e2b8200e
    在包含以增强型链接模式配置连接的多个 vCenter Server 实例的部署中, /usr/lib/vmware-vmafd/bin/dir-cli service list 的输出包括所有节点的所有解决方案用户。运行 /usr/lib/vmware-vmafd/bin/vmafd-cli get-machine-id --server-name localhost 以查找每个主机的本地计算机 ID。每个解决方案用户名称均包括计算机 ID。
  4. 停止所有服务,启动处理证书创建、传播和存储的服务。
    service-control --stop --all
    service-control --start vmafdd
    service-control --start vmdird
    service-control --start vmcad
    
  5. 依次替换 vmdir 和 VECS 中的现有证书。
    对于解决方案用户,必须以该顺序添加证书。例如:
    dir-cli service update --name <vpxd-xxxx-xxx-7c7b769cd9f4> --cert ./vpxd.crt
    vecs-cli entry delete --store vpxd --alias vpxd
    vecs-cli entry create --store vpxd --alias vpxd --cert vpxd.crt --key vpxd.priv
    
    注: 如果不替换 vmdir 中的证书,则解决方案用户无法登录到 vCenter Single Sign-On。
  6. 重新启动所有服务。
    service-control --start --all

示例: 替换解决方案用户证书(中间 CA)

  1. 在增强型链接模式配置中的每个 vCenter Server 节点上,为每个解决方案用户生成一个公钥/私钥对,其中包括为计算机解决方案用户生成一个密钥对以及为每个其他解决方案用户(vpxd、vpxd-extension、vsphere-webclient、wcp)生成一个密钥对。
    1. 为计算机解决方案用户生成密钥对。
      /usr/lib/vmware-vmca/bin/certool --genkey --privkey=machine-key.priv --pubkey=machine-key.pub
      
    2. 为每个节点上的 vpxd 解决方案用户生成密钥对。
      /usr/lib/vmware-vmca/bin/certool --genkey --privkey=vpxd-key.priv --pubkey=vpxd-key.pub
    3. 为每个节点上的 vpxd-extension 解决方案用户生成密钥对。
      /usr/lib/vmware-vmca/bin/certool --genkey --privkey=vpxd-extension-key.priv --pubkey=vpxd-extension-key.pub
    4. 为每个节点上的 vsphere-webclient 解决方案用户生成密钥对。
      /usr/lib/vmware-vmca/bin/certool --genkey --privkey=vsphere-webclient-key.priv --pubkey=vsphere-webclient-key.pub
    5. 为每个节点上的 wcp 解决方案用户生成密钥对。
      /usr/lib/vmware-vmca/bin/certool --genkey --privkey=wcp-key.priv --pubkey=wcp-key.pub
  2. 为每个 vCenter Server 节点上的计算机解决方案用户以及每个其他解决方案用户(vpxd、vpxd-extension、vsphere-webclient、wcp)生成由新的 VMCA 根证书签名的解决方案用户证书。
    注: --Name 参数必须唯一。包括解决方案用户存储的名称,可便于查看证书与解决方案用户之间的映射关系。在任何一种情况下,该示例都包括此名称,例如 vpxdvpxd-extension
    1. 创建 /usr/lib/vmware-vmca/share/config/certool.cfg 文件的一个副本,然后根据需要修改或移除名称、IP 地址、DNS 名称和电子邮件地址字段,并将该文件重命名为类似于 sol_usr.cfg 的名称。
    2. 为每个节点上的计算机解决方案用户生成证书。
      /usr/lib/vmware-vmca/bin/certool --gencert --cert=new-machine.crt --privkey=machine-key.priv --Name=machine --config sol_usr.cfg
    3. 为每个节点上的 vpxd 解决方案用户生成证书。
      /usr/lib/vmware-vmca/bin/certool --gencert --cert=new-vpxd.crt --privkey=vpxd-key.priv --Name=vpxd --config sol_usr.cfg
      
    4. 为每个节点上的 vpxd-extension 解决方案用户生成证书。
      /usr/lib/vmware-vmca/bin/certool --gencert --cert=new-vpxd-extension.crt --privkey=vpxd-extension-key.priv --Name=vpxd-extension --config sol_usr.cfg
    5. 通过运行以下命令为每个节点上的 vsphere-webclient 解决方案用户生成证书。
      /usr/lib/vmware-vmca/bin/certool --gencert --cert=new-vsphere-webclient.crt --privkey=vsphere-webclient-key.priv --Name=vsphere-webclient --config sol_usr.cfg
    6. 通过运行以下命令为每个节点上的 wcp 解决方案用户生成证书。
      /usr/lib/vmware-vmca/bin/certool --gencert --cert=new-wcp.crt --privkey=wcp-key.priv --Name=wcp --config sol_usr.cfg
  3. 将 VECS 中的解决方案用户证书替换为新的解决方案用户证书。
    注: --store--alias 参数必须与服务的默认名称完全匹配。
    1. 替换每个节点上的计算机解决方案用户证书:
      /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store machine --alias machine
      /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store machine --alias machine --cert new-machine.crt --key machine-key.priv
      
    2. 替换每个节点上的 vpxd 解决方案用户证书。
      /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store vpxd --alias vpxd
      /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store vpxd --alias vpxd --cert new-vpxd.crt --key vpxd-key.priv
      
    3. 替换每个节点上的 vpxd-extension 解决方案用户证书。
      /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store vpxd-extension --alias vpxd-extension
      /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store vpxd-extension --alias vpxd-extension --cert new-vpxd-extension.crt --key vpxd-extension-key.priv
      
    4. 替换每个节点上的 vsphere-webclient 解决方案用户证书。
      /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store vsphere-webclient --alias vsphere-webclient
      /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store vsphere-webclient --alias vsphere-webclient --cert new-vsphere-webclient.crt --key vsphere-webclient-key.priv
      
    5. 替换每个节点上的 wcp 解决方案用户证书。
      /usr/lib/vmware-vmafd/bin/vecs-cli entry delete --store wcp --alias wcp
      /usr/lib/vmware-vmafd/bin/vecs-cli entry create --store wcp --alias wcp --cert new-wcp.crt --key wcp-key.priv
      
  4. 使用新的解决方案用户证书更新 VMware Directory Service (vmdir)。系统将提示您输入 vCenter Single Sign-On 管理员密码。
    1. 运行 /usr/lib/vmware-vmafd/bin/dir-cli service list 可获取每个解决方案用户的唯一服务 ID 后缀。可以在 vCenter Server 系统上运行以下命令。
      /usr/lib/vmware-vmafd/bin/dir-cli service list
      output:
      1. machine-623bef28-0311-436e-b21f-6e0d39aa5179
      2. vsphere-webclient-623bef28-0311-436e-b21f-6e0d39aa5179
      3. vpxd-623bef28-0311-436e-b21f-6e0d39aa5179
      4. vpxd-extension-623bef28-0311-436e-b21f-6e0d39aa5179
      5. hvc-623bef28-0311-436e-b21f-6e0d39aa5179
      6. wcp-1cbe0a40-e4ce-4378-b5e7-9460e2b8200e
      注: 在大型部署中列出解决方案用户证书时, /usr/lib/vmware-vmafd/bin/dir-cli list 的输出包括所有节点的所有解决方案用户。运行 /usr/lib/vmware-vmafd/bin/vmafd-cli get-machine-id --server-name localhost 以查找每个主机的本地计算机 ID。每个解决方案用户名称均包括计算机 ID。
    2. 替换每个 vCenter Server 节点上的 vmdir 中的计算机证书。例如,如果 machine-6fd7f140-60a9-11e4-9e28-005056895a69 为 vCenter Server 中的计算机解决方案用户,请运行此命令:
      /usr/lib/vmware-vmafd/bin/dir-cli service update --name machine-6fd7f140-60a9-11e4-9e28-005056895a69 --cert new-machine.crt
    3. 替换每个节点上的 vmdir 中的 vpxd 解决方案用户证书。例如,如果 vpxd-6fd7f140-60a9-11e4-9e28-005056895a69 为 vpxd 解决方案用户 ID,请运行此命令:
      /usr/lib/vmware-vmafd/bin/dir-cli service update --name vpxd-6fd7f140-60a9-11e4-9e28-005056895a69 --cert new-vpxd.crt
    4. 替换每个节点上的 vmdir 中的 vpxd-extension 解决方案用户证书。例如,如果 vpxd-extension-6fd7f140-60a9-11e4-9e28-005056895a69 为 vpxd-extension 解决方案用户 ID,请运行此命令:
      /usr/lib/vmware-vmafd/bin/dir-cli service update --name vpxd-extension-6fd7f140-60a9-11e4-9e28-005056895a69 --cert new-vpxd-extension.crt
      
    5. 替换每个节点上的 vsphere-webclient 解决方案用户证书。例如,如果 vsphere-webclient-6fd7f140-60a9-11e4-9e28-005056895a69 为 vsphere-webclient 解决方案用户 ID,请运行此命令:
      /usr/lib/vmware-vmafd/bin/dir-cli service update --name vsphere-webclient-6fd7f140-60a9-11e4-9e28-005056895a69 --cert new-vsphere-webclient.crt
      
    6. 替换每个节点上的 wcp 解决方案用户证书。例如,如果 wcp-1cbe0a40-e4ce-4378-b5e7-9460e2b8200e 是 wcp 解决方案用户 ID,请运行以下命令:
      /usr/lib/vmware-vmafd/bin/dir-cli service update --name wcp-1cbe0a40-e4ce-4378-b5e7-9460e2b8200e --cert new-wcp.crt