此内容没有您所选择的语言版本。
Chapter 14. Enabling SSL/TLS on Overcloud Public Endpoints
By default, the overcloud uses unencrypted endpoints for its services. This means that the overcloud configuration requires an additional environment file to enable SSL/TLS for its Public API endpoints. The following chapter shows how to configure your SSL/TLS certificate and include it as a part of your overcloud creation.
This process only enables SSL/TLS for Public API endpoints. The Internal and Admin APIs remain unencrypted.
This process requires network isolation to define the endpoints for the Public API.
14.1. Initializing the Signing Host
The signing host is the host that generates and signs new certificates with a certificate authority. If you have never created SSL certificates on the chosen signing host, you might need to initialize the host so that it can sign new certificates.
				The /etc/pki/CA/index.txt file contains records of all signed certificates. Check if this file exists. If it does not exist, create an empty file:
			
sudo touch /etc/pki/CA/index.txt
$ sudo touch /etc/pki/CA/index.txt
				The /etc/pki/CA/serial file identifies the next serial number to use for the next certificate to sign. Check if this file exists. If the file does not exist, create a new file with a new starting value:
			
echo '1000' | sudo tee /etc/pki/CA/serial
$ echo '1000' | sudo tee /etc/pki/CA/serial14.2. Creating a Certificate Authority
Normally you sign your SSL/TLS certificates with an external certificate authority. In some situations, you might want to use your own certificate authority. For example, you might want to have an internal-only certificate authority.
Generate a key and certificate pair to act as the certificate authority:
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 genrsa -out ca.key.pem 4096
$ openssl req  -key ca.key.pem -new -x509 -days 7300 -extensions v3_ca -out ca.crt.pem
				The openssl req command asks for certain details about your authority. Enter these details at the prompt.
			
				These commands create a certificate authority file called ca.crt.pem.
			
14.3. Adding the Certificate Authority to Clients
For any external clients aiming to communicate using SSL/TLS, copy the certificate authority file to each client that requires access to your Red Hat OpenStack Platform environment.
sudo cp ca.crt.pem /etc/pki/ca-trust/source/anchors/
$ sudo cp ca.crt.pem /etc/pki/ca-trust/source/anchors/After you copy the certificate authority file to each client, run the following command on each client to add the certificate to the certificate authority trust bundle:
sudo update-ca-trust extract
$ sudo update-ca-trust extractFor example, the undercloud requires a copy of the certificate authority file so that it can communicate with the overcloud endpoints during creation.
14.4. Creating an SSL/TLS Key
				Run the following commands to generate the SSL/TLS key (server.key.pem) that you use at different points to generate your undercloud or overcloud certificates:
			
openssl genrsa -out server.key.pem 2048
$ openssl genrsa -out server.key.pem 204814.5. Creating an SSL/TLS Certificate Signing Request
This next procedure creates a certificate signing request for the overcloud. Copy the default OpenSSL configuration file for customization.
cp /etc/pki/tls/openssl.cnf .
$ cp /etc/pki/tls/openssl.cnf .
				Edit the custom openssl.cnf file and set SSL parameters to use for the overcloud. An example of the types of parameters to modify include:
			
				Set the commonName_default to one of the following:
			
- 
						If using an IP to access over SSL/TLS, use the Virtual IP for the Public API. Set this VIP using the PublicVirtualFixedIPsparameter in an environment file. For more information, see Section 13.4, “Assigning Predictable Virtual IPs”. If you are not using predictable VIPs, the director assigns the first IP address from the range defined in theExternalAllocationPoolsparameter.
- If using a fully qualified domain name to access over SSL/TLS, use the domain name instead.
				Include the same Public API IP address as an IP entry and a DNS entry in the alt_names section. If also using DNS, include the hostname for the server as DNS entries in the same section. For more information about openssl.cnf, run man openssl.cnf.
			
				Run the following command to generate certificate signing request (server.csr.pem):
			
openssl req -config openssl.cnf -key server.key.pem -new -out server.csr.pem
$ openssl req -config openssl.cnf -key server.key.pem -new -out server.csr.pem
				Make sure to include the SSL/TLS key you created in Section 14.4, “Creating an SSL/TLS Key” for the -key option.
			
				Use the server.csr.pem file to create the SSL/TLS certificate in the next section.
			
14.6. Creating the SSL/TLS Certificate
Run the following command to create a certificate for your undercloud or 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
$ 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.pemThis command uses the following options:
- 
						The configuration file specifying the v3 extensions. Include the configuration file with the -configoption.
- 
						The certificate signing request from Section 14.5, “Creating an SSL/TLS Certificate Signing Request” to generate and sign the certificate with a certificate authority. Include the certificate signing request with the -inoption.
- 
						The certificate authority you created in Section 14.2, “Creating a Certificate Authority”, which signs the certificate. Include the certificate authority with the -certoption.
- 
						The certificate authority private key you created in Section 14.2, “Creating a Certificate Authority”. Include the private key with the -keyfileoption.
				This command creates a new certificate named server.crt.pem. Use this certificate in conjunction with the SSL/TLS key from Section 14.4, “Creating an SSL/TLS Key” to enable SSL/TLS.
			
14.7. Enabling SSL/TLS
				Copy the enable-tls.yaml environment file from the Heat template collection:
			
cp -r /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-tls.yaml ~/templates/.
$ cp -r /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-tls.yaml ~/templates/.Edit this file and make the following changes for these parameters:
- SSLCertificate
- Copy the contents of the certificate file ( - server.crt.pem) into the- SSLCertificateparameter. For example:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow Important- The certificate contents require the same indentation level for all new lines. - SSLKey
- Copy the contents of the private key ( - server.key.pem) into the- SSLKeyparameter. For example:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow Important- The private key contents require the same indentation level for all new lines. 
 
14.8. Injecting a Root Certificate
				If the certificate signer is not in the default trust store on the overcloud image, you must inject the certificate authority into the overcloud image. Copy the inject-trust-anchor-hiera.yaml environment file from the heat template collection:
			
cp -r /usr/share/openstack-tripleo-heat-templates/environments/ssl/inject-trust-anchor-hiera.yaml ~/templates/.
$ cp -r /usr/share/openstack-tripleo-heat-templates/environments/ssl/inject-trust-anchor-hiera.yaml ~/templates/.Edit this file and make the following changes for these parameters:
- CAMap
- Lists each certificate authority content (CA) to inject into the overcloud. The overcloud requires both a CA files used to sign the certificates for the undercloud and the overcloud. Copy the contents of the root certificate authority file ( - ca.crt.pem) into an entry. For example, your- CAMapparameter might look like the following:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow Important- The certificate authority contents require the same indentation level for all new lines. 
				You can also inject additional CAs with the CAMap parameter.
			
14.9. Configuring DNS Endpoints
				If using a DNS hostname to access the overcloud through SSL/TLS, create a new environment file (~/templates/cloudname.yaml) to define the hostname of the overcloud’s endpoints. Use the following parameters:
			
- CloudName
- The DNS hostname of the overcloud endpoints.
- DnsServers
- 
							A list of DNS servers to use. The configured DNS servers must contain an entry for the configured CloudNamethat matches the IP address of the Public API.
An example of the contents for this file:
parameter_defaults: CloudName: overcloud.example.com DnsServers: ["10.0.0.254"]
parameter_defaults:
  CloudName: overcloud.example.com
  DnsServers: ["10.0.0.254"]
				The deployment command (openstack overcloud deploy) uses the -e option to add environment files. Add the environment files from this section in the following order:
			
- 
						The environment file to enable SSL/TLS (enable-tls.yaml)
- 
						The environment file to set the DNS hostname (cloudname.yaml)
- 
						The environment file to inject the root certificate authority (inject-trust-anchor-hiera.yaml)
- The environment file to set the public endpoint mapping: - 
								If using a DNS name for accessing the public endpoints, use /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-endpoints-public-dns.yaml
- 
								If using a IP address for accessing the public endpoints, use /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-endpoints-public-ip.yaml
 
- 
								If using a DNS name for accessing the public endpoints, use 
For example:
openstack overcloud deploy --templates [...] -e /home/stack/templates/enable-tls.yaml -e ~/templates/cloudname.yaml -e ~/templates/inject-trust-anchor-hiera.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-endpoints-public-dns.yaml
$ openstack overcloud deploy --templates [...] -e /home/stack/templates/enable-tls.yaml -e ~/templates/cloudname.yaml -e ~/templates/inject-trust-anchor-hiera.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-endpoints-public-dns.yaml14.11. Updating SSL/TLS Certificates
If you need to update certificates in the future:
- 
						Edit the enable-tls.yamlfile and update theSSLCertificate,SSLKey, andSSLIntermediateCertificateparameters.
- 
						If your certificate authority has changed, edit the inject-trust-anchor.yamlfile and update theSSLRootCertificateparameter.
Once the new certificate content is in place, rerun your deployment command. For example:
openstack overcloud deploy --templates [...] -e /home/stack/templates/enable-tls.yaml -e ~/templates/cloudname.yaml -e ~/templates/inject-trust-anchor.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-endpoints-public-dns.yaml
$ openstack overcloud deploy --templates [...] -e /home/stack/templates/enable-tls.yaml -e ~/templates/cloudname.yaml -e ~/templates/inject-trust-anchor.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-endpoints-public-dns.yaml