18.3. 通过 TLS 和 SSL 进行远程管理
您可以使用 TLS 和 SSL 协议管理虚拟机。TLS 和 SSL 提供更大的可扩展性,但比 SSH 复杂(请参阅 第 18.2 节 “使用 SSH 进行远程管理”)。TLS 和 SSL 是 Web 浏览器用于安全连接的相同。libvirt 管理连接为传入连接打开一个 TCP 端口,该连接会根据 x509 证书安全地加密和验证。以下流程提供了为 TLS 和 SSL 管理创建和部署身份验证证书的说明。
过程 18.1. 为 TLS 管理创建证书颁发机构(CA)密钥
- 开始之前,确认已安装了 gnutls-utils。如果没有安装,请安装它:
# yum install gnutls-utils
- 使用以下命令生成私钥:
# certtool --generate-privkey > cakey.pem
- 生成密钥后,创建签名文件,以便密钥可以自签名。要做到这一点,创建一个带有签名详情的文件,并将其命名为
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 证书文件,以便他们知道您的 CA 发布的证书可以信任。要查看此文件的内容,请运行:cacert.pem
目录中的所有客户端和服务器上安装 cacert.pem# certtool -i --infile cacert.pem
这是设置您的 CA 所需要的。保持 CA 的私钥安全,因为您需要它才能为客户端和服务器签发证书。
过程 18.2. 发出服务器证书
此流程演示了如何将 X.509 通用名称(CN)字段设置为服务器主机名来签发证书。CN 必须与客户端用来连接到服务器的主机名匹配。在本例中,客户端将使用 URI:
qemu://mycommonname/system
连接到服务器,因此 CN 字段应当相同,例如"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 --infile servercert.pem
打开此文件时,CN=
参数应当与之前设置的 CN 相同。例如,mycommonname
。 - 在以下位置安装两个文件:
ServerKey.pem
- 服务器的私钥。将这个文件放在以下位置:/etc/pki/libvirt/private/serverkey.pem
servercert.pem
- 服务器的证书。将它安装到服务器上的以下位置:/etc/pki/libvirt/servercert.pem
过程 18.3. 发出客户端证书
- 对于每个客户端(例如,与 libvirt 链接的任何程序(如 virt-manager),您需要向证书发出 X.509 区分名称(DN)字段,设置为合适的名称。这需要在企业层面上决定。例如,会使用以下信息:
C=USA,ST=North Carolina,L=Raleigh,O=Red Hat,CN=name_of_client
- 创建一个私钥:
# 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