danvaida.letsencrypt
Ansible Let's Encrypt Rolle
Erhält TLS-Zertifikate über ACME von Let's Encrypt.
Sobald Sie die Herausforderung(en) abgeschlossen und das/die Zertifikat(e) erhalten haben, sind Sie dafür verantwortlich, es/sie in Ihren gewünschten Webserver(n) einzurichten.
Anforderungen
openssl
- Python >= 2.7.9
Rollenvariablen
letsencrypt_certs_dir: Pfad zum Arbeitsverzeichnis, in dem alle CSRs, Schlüssel und Zertifikate gespeichert werden.
letsencrypt_account_key_name: Name des RSA-Schlüssels des Let's Encrypt-Kontos.
letsencrypt_account_key_size: Größe des RSA-Schlüssels des Let's Encrypt-Kontos.
letsencrypt_certs_to_generate: Liste der zu erzeugenden Zertifikate.
account_email: E-Mail-Adresse, die mit dem ACME-Server ausgetauscht wird. Sie erhalten Warnungen zur Zertifikatsablauf.
account_key: Pfad zur RSA-Schlüsseldatei.
acme_directory: ACME API-Endpunkt. Verwendet standardmäßig die Staging-Umgebung von Let's Encrypt.
agreement: URI zu den Nutzungsbedingungen, denen Sie zustimmen.
challenge: Der akzeptierte Herausforderungstyp.
csr: Pfad zur CSR-Datei.
dest: Pfad zur resultierenden Zertifikatsdatei (wo Sie es speichern möchten).
remaining_days: Anzahl der Tage, für die das Zertifikat gültig sein soll.
Abhängigkeiten
Nicht zutreffend
Beispiel Playbook
In diesem Beispiel fragen wir ein Zertifikat von Let's Encrypt an, obwohl dieses Ansible-Modul theoretisch mit jedem ACME-Server kompatibel sein sollte.
Wir haben drei Plays:
- CSR, Schlüssel erstellen und Anfrage zur Zertifikatsausstellung stellen.
- Die Herausforderung abschließen (DNS-Eintrag in Route53 in diesem Fall).
- Um Bestätigung der Herausforderung bitten und das Zertifikat anfordern.
- name: ACME Schritt 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: 'your-domain.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 }}/your-domain.com/your.csr"
dest: "{{ letsencrypt_certs_dir }}/your-domain.com/domain.crt"
acme_directory: 'https://acme-v01.api.letsencrypt.org/directory'
tags: letsencrypt
tasks:
- name: Die Liste der zu erstellenden Route53-Einträge sollte als Fakt festgelegt werden
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: ACME Herausforderung lösen (DNS-Eintrag in Route53)
hosts: localhost
connection: local
roles:
- role: route53
tags: route53
- name: ACME Schritt 2
hosts: localhost
connection: local
pre_tasks:
- name: Wir sollten warten, bis sich die DNS-Änderungen ausbreiten
pause: minutes=1
roles:
- role: letsencrypt
letsencrypt_acme_step: two
tags: letsencrypt
Die Lösung anderer Herausforderungstypen sollte für diese Rolle gleich und transparent sein.
Testen
Die Tests basieren auf dem DNS-Herausforderungstyp und lösen ihn über AWS Route53.
Wenn Sie die Tests in der bereitgestellten Docker-Umgebung ausführen möchten, führen Sie die folgenden Befehle aus:
$ 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
To-Do
- Unterstützung anderer Herausforderungstypen
- Unterstützung anderer DNS-Dienste APIs (z.B. Cloud DNS)
- Integration mit einigen Webserver-Rollen (z.B. NGINX, Apache)
- Unterstützung der Verlängerung
- Unterstützung mehrerer Ansible-Versionen und Distributionen
- Aktualisierung von Ansible im Test-Docker-Image, um die Vereinbarung für die DNS-Herausforderung nicht angeben zu müssen.
Lizenz
Dieses Projekt ist unter den Bedingungen der GNU GPL v3.0 Lizenz lizenziert.
Autoreninformation
Rolle erstellt von Dan Vaida.
Beiträge
Siehe die To-Do Liste. Beiträge sind willkommen.
Obtains TLS certificates through ACME from Let's Encrypt.
ansible-galaxy install danvaida.letsencrypt