danvaida.letsencrypt
Rôle Ansible Let's Encrypt
Obtient des certificats TLS via ACME de Let's Encrypt.
Une fois que vous avez complété le(s) défi(s) et obtenu le(s) certificat(s), vous êtes responsable de leur configuration sur vos serveurs web.
Exigences
openssl
- Python >= 2.7.9
Variables de rôle
letsencrypt_certs_dir : Chemin vers le répertoire de travail, où tous les CSR, clés et certificats seront stockés.
letsencrypt_account_key_name : Nom de la clé RSA du compte Let's Encrypt.
letsencrypt_account_key_size : Taille de la clé RSA du compte Let's Encrypt.
letsencrypt_certs_to_generate : Liste des certificats à générer.
account_email : Adresse e-mail à échanger avec le serveur ACME. Vous recevrez des avertissements sur l'expiration des certificats.
account_key : Chemin vers le fichier de clé RSA.
acme_directory : Point de terminaison de l'API ACME. Utilise par défaut l'environnement de test de Let's Encrypt.
agreement : URI du document TOS avec lequel vous êtes d'accord.
challenge : Le type de défi accepté.
csr : Chemin vers le fichier CSR.
dest : Chemin vers le fichier de certificat résultant (où vous souhaitez l'enregistrer).
remaining_days : Nombre de jours pendant lesquels le certificat reste valide.
Dépendances
N/A
Exemple de Playbook
Dans cet exemple, nous demandons un certificat à Let's Encrypt, bien que, en théorie, ce module Ansible devrait être compatible avec n'importe quel serveur ACME.
Nous avons trois étapes :
- créer CSR, clé et demande de délivrance de certificat
- compléter le défi (enregistrement DNS dans Route53 dans ce cas)
- demander la validation du défi et obtenir le certificat.
- name: Étape ACME 1
hosts: localhost
connection: local
roles:
- role: letsencrypt
letsencrypt_certs_dir: './files/production/certs'
letsencrypt_account_key_name: 'letsencrypt_account'
letsencrypt_account_key_size: 2048
letsencrypt_certs_to_generate:
- domain: 'votre-domaine.com'
key_size: 2048
account_email: '[email protected]'
account_key: "{{ letsencrypt_certs_dir }}/{{ letsencrypt_account_key_name }}.key"
challenge: 'dns-01'
agreement: 'https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf'
csr: "{{ letsencrypt_certs_dir }}/votre-domaine.com/votre.csr"
dest: "{{ letsencrypt_certs_dir }}/votre-domaine.com/domaine.crt"
acme_directory: 'https://acme-v01.api.letsencrypt.org/directory'
tags: letsencrypt
tasks:
- name: La liste des enregistrements Route53 à créer doit être définie comme fait
set_fact:
route53_records_to_add: "{{
route53_records_to_add | default([]) +
[{'zone': item.1.domain,
'record': item.0.challenge_data[item.1.domain]['dns-01']['resource'] + '.' + item.1.domain + '.',
'ttl': 300,
'type': 'TXT',
'value': '\"' + item.0.challenge_data[item.1.domain]['dns-01']['resource_value'] + '\"' }]
}}"
with_together:
- "{{ letsencrypt_acme_step_one }}"
- "{{ letsencrypt_certs_to_obtain | default([]) }}"
when: item.1.domain == item.0.item.domain
tags: route53
- name: Résolution du défi ACME (enregistrement DNS dans Route53)
hosts: localhost
connection: local
roles:
- role: route53
tags: route53
- name: Étape ACME 2
hosts: localhost
connection: local
pre_tasks:
- name: Nous devrions attendre que les changements DNS se propagent
pause: minutes=1
roles:
- role: letsencrypt
letsencrypt_acme_step: two
tags: letsencrypt
La réalisation d'autres types de défi devrait être tout aussi simple et opaque pour ce rôle.
Tests
Les tests reposent sur le type de défi DNS et se réalisent via AWS Route53.
Si vous souhaitez exécuter les tests dans l'environnement Docker fourni, exécutez les commandes suivantes :
$ cd /path/to/ansible-roles/letsencrypt
$ ansible-galaxy install \
--force \
--role-file=./tests/requirements.yml \
--roles-path=./tests/dependencies
$ docker build \
--no-cache \
--pull \
--tag ansible-roles-test \
tests/support
$ docker run \
--rm \
--interactive \
--tty \
--volume $PWD:/etc/ansible/roles/letsencrypt \
--volume $PWD/tests/dependencies:/etc/ansible/roles/letsencrypt/tests/roles:ro \
--env AWS_ACCESS_KEY=$AWS_ACCESS_KEY \
--env AWS_SECRET_KEY=$AWS_SECRET_KEY \
--workdir /etc/ansible/roles/letsencrypt/tests \
ansible-roles-test
À faire
- Supporter d'autres types de défi
- Supporter d'autres API de services DNS (c'est-à-dire Cloud DNS)
- Intégration avec certains rôles de serveurs web (c'est-à-dire NGINX, Apache)
- Supporter le renouvellement
- Supporter plusieurs versions d'Ansible et distributions
- Mettre à jour Ansible dans l'image Docker des tests pour pouvoir ne pas spécifier l'accord pour le défi DNS.
Licence
Ce projet est sous licence GNU GPL v3.0.
Informations sur l'auteur
Rôle créé par Dan Vaida.
Contributions
Voir la liste À faire. Les contributions sont les bienvenues.
Obtains TLS certificates through ACME from Let's Encrypt.
ansible-galaxy install danvaida.letsencrypt