tls-certificates
Create and manage TLS certificates, either with Let’s Encrypt or using self-signed ones.
This role is expected to be called using the include_role module, setting
variables specific to the certificate instance wanted (notably, basename,
common_name and subject_alt_names)
Certificates are placed in the base_directory, by default /etc/ssl/ansible.
Private keys are placed in the private/ subdirectory, and signed certificates
in the certs/ subdirectory. All paths can be overridden with the *_path
variables.
Tasks
Orchestration happens in the tasks/main.yml file.
base_directorycreation is handled bytasks/create_directories.yml.Generation of the private key and signing request is done in
tasks/create_keypair.yml.
According to the self_sign variable, one of two processes can happen:
When
self_signis true, a self-signed certificate is generated bytasks/self_sign.yml.When
self_signis false,tasks/letsencrypt.ymltakes care of sending the CSR to Let’s Encrypt for signature.
Let’s Encrypt
The tasks/letsencrypt.yml tasks handle certificate signatures by Let’s
Encrypt. Responding to the ACME challenge is done through the
tasks/letsencrypt_challenge.yml tasks.
We only support the http-01 challenge, and only through nginx.
tasks/letsencrypt_nginx_pre.yml sets up a configuration snippet to publish the
/.well-known directory, as well as a temporary virtual host if
letsencrypt_do_nginx_vhost is true (helpful for bootstraping the
configuration on a clean machine).
Available variables
Certificate settings
basename: Base name for the TLS certs installation path.common_name: Main domain name the certificate will be valid for.subject_alt_names: Alternative names the certificate will be valid for. The common name is automatically added to the list of SANs.base_directory: Base installation directory for the TLS certificates. Defaults to/etc/ssl/ansible.self_sign: If true, self-sign the certificate; if false, request signature from Let’s Encrypt.
Path setting overrides
All default paths are relative to base_directory.
csr_path: Path to the certificate request file. Defaults tocerts/basename.csr.certificate_path: Path to the signed certificate. Defaults tocerts/basename.pem.fullchain_path: Path to the signed certificate with full certificate chain. Defaults tocerts/basename.fullchain.pem.privatekey_path: Path to the private key. Defaults toprivate/basename.key.
Let’s Encrypt settings
Account settings
letsencrypt_account_key: Path to the Let’s Encrypt account private key.letsencrypt_account_email: Email used for the Let’s Encrypt account.letsencrypt_acme_directory: URL to the ACME directory used for requests. Test value:https://acme-staging-v02.api.letsencrypt.org/directory, production value:https://acme-v02.api.letsencrypt.org/directory.letsencrypt_chain_path: Path to the chain of intermediate certificates for Let’s Encrypt validation.
Challenge settings
letsencrypt_challenge_mode: Challenge mode for Let’s Encrypt. Supported values:http-01.letsencrypt_well_known_dir: Directory where to store the/.well-known/data for thehttp-01challenge.
Internal settings:
skip_unit_test: Used internally by the test suite to disable actions that can’t be performed in the gitlab-ci test runner.