5.2. 使用 TLS 和 SSL 进行远程管理
您可以使用 TLS 和 SSL 管理虚拟机。TLS 和 SSL 提供更大的可扩展性,但比 ssh 复杂(请参阅 第 5.1 节 “使用 SSH 进行远程管理”)。TLS 和 SSL 是 Web 浏览器用于安全连接的相同技术。libvirt 管理连接打开传入连接的 TCP 端口,该端口根据 x509 证书安全地加密和验证。以下介绍了为 TLS 和 SSL 管理创建和部署身份验证证书的说明。
过程 5.1. 创建用于 TLS 管理的证书颁发机构(CA)密钥
- 开始之前,请确认已安装 certtool 实用程序。如果没有:
# yum install gnutls-utils
- 使用以下命令生成私钥:
# certtool --generate-privkey > cakey.pem
- 生成密钥后,下一步是创建一个签名文件,以便该密钥可以自我签名。要做到这一点,创建一个带有签名详情的文件并将其命名为
ca.info
。此文件应包含以下内容:# vim ca.info
cn = Name of your organization ca cert_signing_key
- 使用以下命令生成自签名证书:
# certtool --generate-self-signed --load-privkey cakey.pem --template ca.info --outfile cacert.pem
生成文件后,可以使用 rm 命令删除 ca.info 文件。生成过程的结果名为cacert.pem
。此文件是公钥(certificate)。加载的文件cakey.pem
是私钥。此文件不应保存在共享空间中。保留此密钥私钥。 - 在
/etc/pki/CA/
证书颁发机构证书文件,以使它们知道您的 CA 发布的证书可以被信任。要查看此文件的内容,请运行:cacert.pem
目录中的所有客户端和服务器上安装 cacert.pem# certtool -i --infile cacert.pem
这是设置您的 CA 所需的全部内容。使 CA 的私钥保持安全,因为您需要为客户端和服务器发布证书。
过程 5.2. 发出服务器证书
此流程演示了如何为服务器的主机名发出 X.509 CommonName(CN)字段的证书。CN 必须与客户端用来连接到服务器的主机名匹配。在本例中,客户端将使用 URI:
qemu://mycommonname/system
连接到服务器,因此 CN 字段应该相同,ie mycommoname。
- 为服务器创建私钥。
# certtool --generate-privkey > serverkey.pem
- 首先创建名为
server.info
的模板文件,为 CA 的私钥生成签名。确保 CN 设置为与服务器的主机名相同:organization = Name of your organization cn = mycommonname tls_www_server encryption_key signing_key
- 使用以下命令创建证书:
# certtool --generate-certificate --load-privkey serverkey.pem --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem \ --template server.info --outfile servercert.pem
- 这会导致生成的两个文件:
- ServerKey.pem - 服务器的私钥
- servercert.pem - 服务器的公钥
确保保留私钥 secret 的位置。要查看文件的内容,请执行以下命令:# certtool -i --inifile servercert.pem
在打开此文件时,CN=
参数应该和之前设置的 CN 相同。例如,mycommonname
。 - 在以下位置安装这两个文件:
ServerKey.pem
- 服务器的私钥。将此文件放在以下位置:/etc/pki/libvirt/private/serverkey.pem
servercert.pem
- 服务器的证书。在服务器以下位置安装它:/etc/pki/libvirt/servercert.pem
过程 5.3. 发出客户端证书
- 对于每个客户端(例如 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, “发出服务器证书” 类似,但请注意以下例外情况。 - 使用以下命令生成私钥:
# certtool --generate-privkey > clientkey.pem
- 首先创建名为
client.info
的模板文件,为 CA 的私钥生成签名。该文件应当包含以下内容(应自定义字段来反映您的地区/位置):country = USA state = North Carolina locality = Raleigh organization = Red Hat cn = client1 tls_www_client encryption_key signing_key
- 使用以下命令签署证书:
# certtool --generate-certificate --load-privkey clientkey.pem --load-ca-certificate cacert.pem \ --load-ca-privkey cakey.pem --template client.info --outfile clientcert.pem
- 在客户端机器上安装证书:
# cp clientkey.pem /etc/pki/libvirt/private/clientkey.pem # cp clientcert.pem /etc/pki/libvirt/clientcert.pem