附录 A. SSL/TLS 证书配置
您可以将 undercloud 或 overcloud 设置为使用 SSL/TLS 进行公共端点上的通信。但是,如果使用自有证书认证机构颁发的 SSL 证书,该证书需要参考下一节中的步骤进行配置。
A.1. 初始化签名主机
签名主机是生成新证书并通过证书认证机构进行签名的主机。您从未在所选签名主机上创建 SSL 证书;您可能需要初始化该主机,让它能够为新证书签名。
/etc/pki/CA/index.txt 文件存储所有已签名证书的记录。检查是否存在此文件。如果不存在,请创建一个空文件:
$ sudo touch /etc/pki/CA/index.txt
/etc/pki/CA/serial 文件标识下一个序列号,以用于下一个要签名的证书。检查是否存在此文件。如果不存在,请使用新的起始值创建一个新文件:
echo '1000' > /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 与 undercloud 或 overcloud 进行通信的客户端,将证书认证机构文件复制到所有需要访问 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 = 192.168.0.1 DNS.2 = instack.localdomain DNS.3 = vip.localdomain
把 commonName_default 设置为 Public API 的 IP 地址,或 FQDN:
-
对于 undercloud,使用
undercloud.conf中的undercloud_public_vip参数。如果这个 IP 地址使用了完全限定域名,则可改为使用域名。 -
对于 overcloud,使用 Public API 的 IP 地址(您的网络隔离环境文件中的
ExternalAllocationPools参数的第一个地址)。如果这个 IP 地址使用了完全限定域名,则改为使用域名。
在 alt_names 部分包括相同的 Public API IP 地址作为 IP 项。如果还使用 DNS,在相同的部分包括服务器的主机名作为 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 密钥。
openssl req 命令会要求输入证书的一些详细信息,包括 Common Name。把 Common Name 设置为 undercloud 或 overcloud 的(取决于您要创建哪个证书)Public API 的 IP 地址。openssl.cnf 文件应当会使用这个 IP 地址作为默认值。
使用 server.csr.pem 文件创建 SSL/TLS 证书。
A.6. 创建 SSL/TLS 证书
以下命令为 undercloud 或 overcloud 创建一个证书:
$ 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 密钥来在 undercloud 或 overcloud 中启用 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.6 节 “配置 director”中的说明继续安装 undercloud。
A.8. 在 Overcloud 中使用证书
按照 Overcloud 高级自定义指南中的说明,将证书文件的内容包含在 enable-tls.yaml 环境文件中。overcloud 部署过程会从 enable-tls.yaml 提取参数,将它们自动集成到 overcloud 中的每一节点上。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.