Security Configuration for Consul
Page last updated: December 11, 2015
As of cf-release v217, Cloud Foundry enables secure traffic between Consul agents by default using encryption and mutual authentication. Follow the instructions below to configure security for Consul. You can configure Consul to be secure or insecure, but we strongly recommend that you configure Consul to be secure.
Configure Secure Mode
Generate SSL Certificates and Keys:
To generate the certificates and keys that you need for Consul, we recommend using certstrap. The cf-release repository contains a helper script,
scripts/generate-consul-certs
. This script uses certstrap to initialize a certificate authority (CA), and generate the certificates and keys for Consul.
If you already have a CA, you may have an existing workflow. You can modify thegenerate-consul-certs
script to use your existing CA instead of generating a new one.
Thegenerate-consul-certs
script outputs files to the./consul-certs
directory.Generate Gossip Encryption Keys:
Run
cat /dev/urandom | head -c 16 | base64
to generate and display a random 16-byte Base64-encoded value.$ cat /dev/urandom | head -c 16 | base64 8b9IJjXH5aN2Z9A5H8HAmg==
-
Copy the contents of the files in the
./consul-certs
directory, as well as the value for your Gossip encryption key, into your stub.
Configure Insecure Mode
Remove all the key- and ceritificate-related properties for Consul in your stub.
Add the following property to your stub:
properties: ... consul: ... require_ssl: false
SSL Certificate, Key, and Certificate Authority Rotation
To rotate your SSL certificates, keys, and certificate authorities, you must perform the following steps.
Add the certificates, keys, and certificate authorities that you want to rotate to your stub file.
You must add your newagent_key
,server_key
, andca_cert
above the existing certificates. Do not remove the existing certificates.... properties: ... consul: ... encrypt_keys: - RANDOM-16-BYTE-BASE64-ENCODED-VALUE ca_cert: | -----BEGIN CERTIFICATE----- ########################################################### ####### Your New CA Certificate ####### ########################################################### -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ########################################################### ####### Your Old CA Certificate ####### ########################################################### -----END CERTIFICATE----- agent_cert: | ----BEGIN CERTIFICATE---- ########################################################### ####### Your New Agent Certificate ####### ########################################################### ----END CERTIFICATE---- ----BEGIN CERTIFICATE---- ########################################################### ####### Your Old Agent Certificate ####### ########################################################### ----END CERTIFICATE---- agent_key: | ----BEGIN CERTIFICATE---- ########################################################### ####### Your New Agent Key ####### ########################################################### ----END CERTIFICATE---- ----BEGIN CERTIFICATE---- ########################################################### ####### Your Old Agent Key ####### ########################################################### ----END CERTIFICATE---- server_cert: | ----BEGIN CERTIFICATE---- ########################################################### ####### Your New Server Certificate ####### ########################################################### ----END CERTIFICATE---- ----BEGIN CERTIFICATE---- ########################################################### ####### Your Old Server Certificate ####### ########################################################### server_key: | ----BEGIN CERTIFICATE---- ########################################################### ####### Your New Server Key ####### ########################################################### ----END CERTIFICATE---- ----BEGIN CERTIFICATE---- ########################################################### ####### Your Old Server Key ####### ########################################################### ----END CERTIFICATE----
Use the instructions for your infrastructure to generate a deployment manifest with your edited stub file.
Deploy Cloud Foundry using this deployment manifest.
After you have deployed Cloud Foundry with the new manifest, remove the old certificates and keys.
properties: consul: encrypt_keys: - RANDOM-16-BYTE-BASE64-ENCODED-VALUE ca_cert: | -----BEGIN CERTIFICATE----- ########################################################### ####### Your New CA Certificate ####### ########################################################### -----END CERTIFICATE----- agent_cert: | ----BEGIN CERTIFICATE---- ########################################################### ####### Your New Agent Certificate ####### ########################################################### ----END CERTIFICATE---- agent_key: | ----BEGIN CERTIFICATE---- ########################################################### ####### Your New Agent Key ####### ########################################################### ----END CERTIFICATE---- server_cert: | ----BEGIN CERTIFICATE---- ########################################################### ####### Your New Server Certificate ####### ########################################################### ----END CERTIFICATE---- ----BEGIN CERTIFICATE---- ########################################################### ####### Your New CA Certificate ####### ########################################################### ----END CERTIFICATE---- server_key: | ----BEGIN CERTIFICATE---- ########################################################### ####### Your New Server Key ####### ########################################################### ----END CERTIFICATE----