如果 Vmware 证书颁发机构 (VMCA) 根证书在不久的将来会过期或者出于其他原因需要替换该证书,则可以使用 CLI 生成新的根证书并将其添加到 VMware Directory Service。然后,可以使用新的根证书生成新的计算机 SSL 证书和解决方案用户证书。

大多数情况下,可以使用 vSphere Certificate Manager 实用程序替换证书。

如果需要进行精细控制,则此方案会为使用 CLI 命令替换一组完整的证书提供详细的分步说明。但是,也可以使用对应的任务中的步骤仅单独替换各个证书。

前提条件

仅有 [email protected] 或 CAAdmins 组中的其他用户可以执行证书管理任务。请参见向 vCenter Single Sign-On 组添加成员

使用 CLI 生成新的 VMCA 签名根证书

可以使用 certool CLI 生成新的 VMCA 签名证书,并将证书发布到 vmdir。

过程

  1. vCenter Server 上,生成新的自签名证书和私钥。
    certool --genselfcacert --outprivkey <key_file_path> --outcert <cert_file_path> --config <config_file>
  2. 将现有根证书替换为新证书。
    certool --rootca --cert <cert_file_path> --privkey <key_file_path>
    该命令会生成证书,将其添加到 vmdir,然后将其添加到 VECS。
  3. 停止所有服务,启动处理证书创建、传播和存储的服务。
    service-control --stop --all
    service-control --start vmafdd
    service-control --start vmdird
    service-control --start vmcad
    
  4. (可选) 将新的根证书发布到 vmdir。
    dir-cli trustedcert publish --cert newRoot.crt
    
    该命令会立即更新所有 vmdir 实例。如果不运行该命令,将新证书传播到所有节点可能需要一些时间。
  5. 重新启动所有服务。
    service-control --start --all

示例: 生成新的 VMCA 签名根证书

以下示例显示了验证当前根 CA 信息和重新生成根证书的所有步骤。
  1. (可选)在 vCenter Server 上,列出 VMCA 根证书以确保其位于证书存储中。
    /usr/lib/vmware-vmca/bin/certool --getrootca 
    输入类似于以下内容:
    output:
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                cf:2d:ff:49:88:50:e5:af
        ...
    
  2. (可选)列出 VECS TRUSTED_ROOTS 存储,并将证书序列号与步骤 1 中输出的序列号进行比较。
    /usr/lib/vmware-vmafd/bin/vecs-cli entry list --store TRUSTED_ROOTS --text
    
    在只有一个根证书的最简单情况下,输出类似于以下内容:
    Number of entries in store :    1
    Alias : 960d43f31eb95211ba3a2487ac840645a02894bd
    Entry type :    Trusted Cert
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                cf:2d:ff:49:88:50:e5:af
  3. 生成新的 VMCA 根证书。该命令可将证书添加到 VECS 和 vmdir(VMware Directory Service)中的 TRUSTED_ROOTS 存储。
    /usr/lib/vmware-vmca/bin/certool --selfca --config=/usr/lib/vmware-vmca/share/config/certool.cfg

使用 CLI 将计算机 SSL 证书替换为 VMCA 签名证书

在生成新的 VMCA 签名根证书后,可以使用 vecs-cli 命令替换环境中的所有计算机 SSL 证书。

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

前提条件

准备好停止所有服务,启动处理证书传播和存储的服务。

过程

  1. 为需要新证书的每台计算机复制一份 certool.cfg
    您可以在 /usr/lib/vmware-vmca/share/config/ 目录中找到 certool.cfg 文件。
  2. 编辑每台计算机的自定义配置文件以包括该计算机的 FQDN。
    对计算机的 IP 地址运行 NSLookup,以查看名称的 DNS 列表,并在文件的“主机名”字段中使用该名称。
  3. 为每个文件生成公用/专用密钥文件对和证书,通过刚刚自定义的配置文件进行传递。
    例如:
    certool --genkey --privkey=machine1.priv --pubkey=machine1.pub
    certool --gencert --privkey=machine1.priv --cert machine1.crt --Name=Machine1_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.crt --key machine1.priv
  6. 重新启动所有服务。
    service-control --start --all

示例: 将计算机证书替换为 VMCA 签名证书

  1. 为 SSL 证书创建配置文件,并在当前目录中将其保存为 ssl-config.cfg
    Country = US
    Name = vmca-<FQDN-example>
    Organization = <my_company>
    OrgUnit = <my_company Engineering>
    State = <my_state> 
    Locality = <mytown>
    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
      

下一步做什么

您还可以替换 ESXi 主机的证书。请参见《vSphere 安全性》出版物。

使用 CLI 将解决方案用户证书替换为新的 VMCA 签名证书

替换计算机 SSL 证书后,可以使用 dir-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。

前提条件

准备好停止所有服务,启动处理证书传播和存储的服务。

过程

  1. 复制一份 certool.cfg,移除名称、IP 地址、DNS 名称和电子邮件字段,并重命名文件,例如,重命名为 sol_usr.cfg
    您可以通过命令行在生成过程中命名证书。解决方案用户不需要其他信息。如果保留默认信息,生成的证书可能会造成混淆。
  2. 传递刚自定义的配置文件为每个解决方案用户生成公用/专用密钥文件对和证书。
    例如:
    /usr/lib/vmware-vmca/bin/certool --genkey --privkey=vpxd.priv --pubkey=vpxd.pub 
    /usr/lib/vmware-vmca/bin/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 中的证书。
    以下示例显示了如何替换 vpxd 服务的证书。
    /usr/lib/vmware-vmafd/bin/dir-cli service update --name <vpxd-xxxx-xxx-7c7b769cd9f4> --cert ./vpxd.crt
    /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 vpxd.crt --key vpxd.priv
    
    注: 如果不替换 vmdir 中的证书,则解决方案用户无法对 vCenter Single Sign-On 进行身份验证。
  6. 重新启动所有服务。
    service-control --start --all

示例: 使用 VMCA 签名解决方案用户证书

  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
      

下一步做什么

重新启动每个 vCenter Server 节点上的所有服务。