Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.2. 使用 TLS 和 SSL 进行远程管理

您可以使用 TLS 和 SSL 管理虚拟机。TLS 和 SSL 提供更大的可扩展性,但比 ssh 复杂(请参阅 第 5.1 节 “使用 SSH 进行远程管理”)。TLS 和 SSL 是 Web 浏览器用于安全连接的相同技术。libvirt 管理连接打开传入连接的 TCP 端口,该端口根据 x509 证书安全地加密和验证。以下介绍了为 TLS 和 SSL 管理创建和部署身份验证证书的说明。

过程 5.1. 创建用于 TLS 管理的证书颁发机构(CA)密钥

  1. 开始之前,请确认已安装 certtool 实用程序。如果没有:
    # yum install gnutls-utils
  2. 使用以下命令生成私钥:
    # certtool --generate-privkey > cakey.pem
  3. 生成密钥后,下一步是创建一个签名文件,以便该密钥可以自我签名。要做到这一点,创建一个带有签名详情的文件并将其命名为 ca.info。此文件应包含以下内容:
    # vim ca.info
    cn = Name of your organization
    ca
    cert_signing_key
    
  4. 使用以下命令生成自签名证书:
    # certtool --generate-self-signed --load-privkey cakey.pem --template ca.info --outfile cacert.pem
    生成文件后,可以使用 rm 命令删除 ca.info 文件。生成过程的结果名为 cacert.pem。此文件是公钥(certificate)。加载的文件 cakey.pem 是私钥。此文件不应保存在共享空间中。保留此密钥私钥。
  5. /etc/pki/CA/ cacert.pem 目录中的所有客户端和服务器上安装 cacert.pem 证书颁发机构证书文件,以使它们知道您的 CA 发布的证书可以被信任。要查看此文件的内容,请运行:
    # certtool -i --infile cacert.pem
    这是设置您的 CA 所需的全部内容。使 CA 的私钥保持安全,因为您需要为客户端和服务器发布证书。

过程 5.2. 发出服务器证书

此流程演示了如何为服务器的主机名发出 X.509 CommonName(CN)字段的证书。CN 必须与客户端用来连接到服务器的主机名匹配。在本例中,客户端将使用 URI: qemu://mycommonname/system 连接到服务器,因此 CN 字段应该相同,ie mycommoname。
  1. 为服务器创建私钥。
    # certtool --generate-privkey > serverkey.pem
  2. 首先创建名为 server.info 的模板文件,为 CA 的私钥生成签名。确保 CN 设置为与服务器的主机名相同:
    organization = Name of your organization
    cn = mycommonname
    tls_www_server
    encryption_key
    signing_key
    
  3. 使用以下命令创建证书:
    # certtool --generate-certificate --load-privkey serverkey.pem --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem \ --template server.info --outfile servercert.pem
  4. 这会导致生成的两个文件:
    • ServerKey.pem - 服务器的私钥
    • servercert.pem - 服务器的公钥
    确保保留私钥 secret 的位置。要查看文件的内容,请执行以下命令:
    # certtool -i --inifile servercert.pem
    在打开此文件时,CN= 参数应该和之前设置的 CN 相同。例如,mycommonname
  5. 在以下位置安装这两个文件:
    • ServerKey.pem - 服务器的私钥。将此文件放在以下位置: /etc/pki/libvirt/private/serverkey.pem
    • servercert.pem - 服务器的证书。在服务器以下位置安装它: /etc/pki/libvirt/servercert.pem

过程 5.3. 发出客户端证书

  1. 对于每个客户端(例如 virt-manager)链接到 libvirt 的任何程序,您需要向合适的名称(DN)发送带有 X.509 Distinguished Name(DN)的证书。这需要根据公司级别决定。
    例如,将使用以下信息:
    C=USA,ST=North Carolina,L=Raleigh,O=Red Hat,CN=name_of_client
    这个过程与 过程 5.2, “发出服务器证书” 类似,但请注意以下例外情况。
  2. 使用以下命令生成私钥:
    # certtool --generate-privkey > clientkey.pem
  3. 首先创建名为 client.info 的模板文件,为 CA 的私钥生成签名。该文件应当包含以下内容(应自定义字段来反映您的地区/位置):
    country = USA
    state = North Carolina
    locality = Raleigh
    organization = Red Hat
    cn = client1
    tls_www_client
    encryption_key
    signing_key
    
  4. 使用以下命令签署证书:
    # certtool --generate-certificate --load-privkey clientkey.pem --load-ca-certificate cacert.pem \ --load-ca-privkey cakey.pem --template client.info --outfile clientcert.pem
  5. 在客户端机器上安装证书:
    # cp clientkey.pem /etc/pki/libvirt/private/clientkey.pem
    # cp clientcert.pem /etc/pki/libvirt/clientcert.pem