附录 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

这个命令使用:

这会产生一个名为 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 中的每一节点上。


为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。