Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
附录 A. SSL/TLS 证书配置
您可以将 undercloud 配置为使用 SSL/TLS 进行公共端点上的通信。但是,如果使用自有证书认证机构颁发的 SSL 证书,该证书需要参考下一节中的步骤进行配置。
有关 overcloud SSL/TLS 证书的创建过程,请参阅 Advanced Overcloud Customization 指南中的“Enabling SSL/TLS on Overcloud Public Endpoints”。
A.1. 初始化签名主机
签名主机是生成新证书并通过证书认证机构进行签名的主机。如果您从未在所选签名主机上创建 SSL 证书,您可能需要初始化该主机,让它能够为新证书签名。
/etc/pki/CA/index.txt
文件存储所有已签名证书的记录。检查是否存在此文件。如果不存在,请创建一个空文件:
$ sudo touch /etc/pki/CA/index.txt
/etc/pki/CA/serial
文件标识下一个序列号,以用于下一个要签名的证书。检查是否存在此文件。如果不存在,请使用新的起始值创建一个新文件:
$ sudo echo '1000' | sudo tee /etc/pki/CA/serial
A.2. 创建一个证书认证机构(CA)
一般情况下,您需要使用一个外部的证书认证机构来签发您的 SSL/TLS 证书。在一些情况下,您可能需要使用自己的证书认证机构。例如,您希望创建一个只对内部有效的证书认证机构。
创建一个密钥和证书对来作为证书认证机构:
$ openssl genrsa -out ca.key.pem 4096 $ openssl req -key ca.key.pem -new -x509 -days 7300 -extensions v3_ca -out ca.crt.pem
openssl req
命令会要求输入认证机构的详细信息。根据提示输入所需信息。
这会创建一个名为 ca.crt.pem
的证书认证机构文件。
A.3. 把证书认证机构添加到客户端中
对于任何需要使用 SSL/TLS 进行通信的外部客户端,将证书认证机构文件复制到所有需要访问Red Hat OpenStack Platform环境的客户端上。在复制完成后,在客户端上运行以下命令,将该文件加入到证书认证机构信任套件中:
$ sudo cp ca.crt.pem /etc/pki/ca-trust/source/anchors/ $ sudo update-ca-trust extract
A.4. 创建一个 SSL/TLS 密钥
运行以下命令以生成 SSL/TLS 密钥(server.key.pem
)。我们可以在不同地方使用它来生成自己的 undercloud 或 overcloud 证书:
$ openssl genrsa -out server.key.pem 2048
A.5. 创建一个 SSL/TLS 证书签发请求
下一步会为 undercloud 或 overcloud 创建一个证书签名请求。
复制默认的 OpenSSL 配置文件用来进行定制。
$ cp /etc/pki/tls/openssl.cnf .
编辑自定义的 openssl.cnf
文件,把 SSL 参数设置为被 director 使用。一个包括相关参数的示例如下:
[req] distinguished_name = req_distinguished_name req_extensions = v3_req [req_distinguished_name] countryName = Country Name (2 letter code) countryName_default = AU stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Queensland localityName = Locality Name (eg, city) localityName_default = Brisbane organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = Red Hat commonName = Common Name commonName_default = 192.168.0.1 commonName_max = 64 [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] IP.1 = 192.168.0.1 DNS.1 = instack.localdomain DNS.2 = vip.localdomain DNS.3 = 192.168.0.1
将 commonName_default
设置为以下之一:
-
如果使用 IP 地址通过 SSL/TLS 访问,请使用
undercloud.conf
中的undercloud_public_host
参数。 - 如果使用完全限定域名通过 SSL/TLS 访问,则改为使用域名。
编辑 alt_names
部分,使其包含以下条目:
-
IP
- 供客户端通过 SSL 访问 director 的 IP 地址列表。 -
DNS
- 供客户端通过 SSL 访问 director 的域名列表。其中也包含公共 API IP 地址作为在alt_names
部分末尾的 DNS 条目。
如需了解有关 openssl.cnf
的更多信息,请运行 man openssl.cnf
。
运行以下命令来产生证书签发请求(server.csr.pem
):
$ openssl req -config openssl.cnf -key server.key.pem -new -out server.csr.pem
确保 -key
选项中包括了在 第 A.4 节 “创建一个 SSL/TLS 密钥” 中创建的 SSL/TLS 密钥。
使用 server.csr.pem
文件创建 SSL/TLS 证书。
A.6. 创建 SSL/TLS 证书
以下命令为 undercloud 或 overcloud 创建一个证书:
$ sudo openssl ca -config openssl.cnf -extensions v3_req -days 3650 -in server.csr.pem -out server.crt.pem -cert ca.crt.pem -keyfile ca.key.pem
这个命令使用:
-
配置文件来指定 v3 扩展。把它作为
-config
选项。 -
第 A.5 节 “创建一个 SSL/TLS 证书签发请求” 中介绍的证书签发请求来产生证书,并通过证书认证机构进行签发。把它作为
-in
选项。 -
您在第 A.2 节 “创建一个证书认证机构(CA)”中创建的证书认证机构, 它将为证书签名。请将它包含为
-cert
选项。 -
您在第 A.2 节 “创建一个证书认证机构(CA)”中创建的证书认证机构私钥。请将它包含为
-keyfile
选项。
这会产生一个名为 server.crt.pem
的证书。使用此证书以及在 第 A.4 节 “创建一个 SSL/TLS 密钥” 中创建的 SSL/TLS 密钥来启用 SSL/TLS。
A.7. 在 undercloud 中使用证书
运行以下命令来组合证书和密钥:
$ cat server.crt.pem server.key.pem > undercloud.pem
这会创建一个 undercloud.pem
文件。在 undercloud.conf
中指定这个文件的位置作为 undercloud_service_certificate
选项。另外,这个文件还需要一个特殊的 SELinux context,从而使 HAProxy 工具可以读取它。请参照以下示例:
$ sudo mkdir /etc/pki/instack-certs $ sudo cp ~/undercloud.pem /etc/pki/instack-certs/. $ sudo semanage fcontext -a -t etc_t "/etc/pki/instack-certs(/.*)?" $ sudo restorecon -R /etc/pki/instack-certs
把 undercloud.pem
文件的位置添加到 undercloud.conf
文件的 undercloud_service_certificate
选项中。例如:
undercloud_service_certificate = /etc/pki/instack-certs/undercloud.pem
另外,确保把第 A.2 节 “创建一个证书认证机构(CA)”中创建的证书认证机构添加到 undercloud 的信任证书认证机构列表中,从而使 undercloud 中的不同服务可以访问这个证书认证机构:
$ sudo cp ca.crt.pem /etc/pki/ca-trust/source/anchors/ $ sudo update-ca-trust extract
按照第 4.1 节 “配置 director”中的说明,继续安装 undercloud。