martin-v.letsencryptsh
dehydrated
Installieren und konfigurieren Sie dehydrated
. Erstellen Sie einen Benutzer für das Herunterstufen von Berechtigungen und eine Cron-Konfiguration für die Zertifikatserneuerung.
dehydrated arbeitet mit Ihren privaten Schlüsseln, also seien Sie vorsichtig und überprüfen Sie den Code dieser Ansible-Rolle und das verwendete dehydrated-Skript.
Für ein Beispiel-Setup mit Nginx als HTTPS-Proxy sehen Sie sich die Ansible-Rolle martin-v/ansible-nginx_https_only an.
Anforderungen
Die Rolle installiert auf dem Host:
- openssl
- curl
- sed
- grep
- mktemp
- git
Diese Rolle benötigt einen Webserver, der das im dehydrated_challengesdir
konfigurierte Verzeichnis (Standard: /var/www/dehydrated/
) unter der Adresse http://<your-domain>/.well-known/acme-challenge/
für alle angeforderten Zertifikatsdomainen bereitstellt.
Rollenvariablen
Erforderliche Variablen:
dehydrated_contactemail
Adresse für das Let’s Encrypt-Konto. Hauptsächlich für Benachrichtigungen zur Zertifikatserneuerung, sollte aber nicht erforderlich sein, wenn der Cron-Job gut funktioniert.
dehydrated_contactemail: certmaster@example.com
dehydrated_letsencrypt_agreed_terms
Um die Nutzungsbedingungen von Let’s Encrypt zu akzeptieren, setzen Sie die Variable dehydrated_letsencrypt_agreed_terms
auf die aktuelle Lizenz-URL. Sie finden die aktuelle URL unter https://acme-v01.api.letsencrypt.org/terms.
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains
Liste von Domains für Zertifikatsanfragen. Für jede Zeile wird ein Zertifikat im Ordner /etc/dehydrated/certs/
mit dem Namen der ersten Domain in der Zeile erstellt. Die erste Domain ist der gemeinsame Name, die anderen in der Zeile werden alternative Namen für das Zertifikat sein.
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert
Die Zertifikate müssen für Dienste wie Apache oder Dovecot lesbar sein. Aber nur die spezifischen Dienste sollten Zugriff auf das Zertifikat für diesen Service haben. Daher müssen wir den Besitzer/Gruppe für jedes Zertifikat auf einen bestimmten Wert ändern. Aus Sicherheitsgründen kann dies nur vom Root-Benutzer durchgeführt werden.
Um eine generische Lösung zu haben, existiert die Variable dehydrated_deploy_cert
. Diese Variable muss ein Bash-Skript für die Zertifikatsbereitstellung enthalten. Typische Aufgaben bei der Bereitstellung sind das Kopieren des Zertifikats in andere Verzeichnisse, das Ändern des Dateibesitzers/-berechtigungen und das Neustarten der Dienste.
Dieser Code wird ähnlich wie normale dehydrated-Hooks aufgerufen, jedoch nach dem vollständigen dehydrated-Durchlauf und mit Root-Rechten. Der Code wird einmal für jedes produzierte Zertifikat aufgerufen.
Parameter:
DOMAIN
Der primäre Domain-Name, d.h. der gemeinsame Name (CN) des Zertifikats.KEYFILE
(Dateiname: privkey.pem) Der Pfad zur Datei mit dem privaten Schlüssel.CERTFILE
(Dateiname: cert.pem) Der Pfad zur Datei mit dem signierten Zertifikat.FULLCHAINFILE
(Dateiname: fullchain.pem) Der Pfad zur Datei mit der vollständigen Zertifikatskette.CHAINFILE
(Dateiname: chain.pem) Der Pfad zur Datei mit den Zwischenzertifikaten.TIMESTAMP
Zeitstempel, wann das angegebene Zertifikat erstellt wurde.
Beispiel:
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
dehydrated_run_cron_on_every_ansible_run
Diese Rolle aktiviert bei jeder Ausführung das Cron-Skript zur Erstellung oder Aktualisierung der Zertifikate. Um dieses Verhalten zu deaktivieren, verwenden Sie:
dehydrated_run_cron_on_every_ansible_run: false
Optionale Variablen:
dehydrated_challengesdir
Verzeichnis für acme-challenge-Dateien. Ihr Webserver sollte dieses Verzeichnis unter http://<your-domain>/.well-known/acme-challenge/
für alle zuvor aufgeführten Domains öffentlich machen. Dieses Verzeichnis wird erstellt, falls es nicht existiert. Es sollte nur für den dehydrated-Benutzer beschreibbar und für Ihren Webserver lesbar sein, was durch diese Rolle durchgesetzt wird.
dehydrated_challengesdir: /var/www/dehydrated/
Weitere Variablen
Es gibt auch einige ungewöhnliche Variablen für Superuser, die mehr Kontrolle benötigen. Für Details schauen Sie in die Datei defaults/main.yml
.
Abhängigkeiten
Keine.
Beispiel-Playbook
- hosts: all
remote_user: root
vars_files:
- dehydrated_vars.yml
roles:
- martin-v.dehydrated
Beispielvariablen-Datei
dehydrated_contactemail: [email protected]
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
Tipps
Um Zertifikate während der Ansible-Bereitstellung zu erstellen, können Sie das reguläre Cron-Skript aufrufen: shell: "/etc/cron.weekly/dehydrated"
. Der Ordner tests
enthält ein vollständig laufendes Beispiel.
Für den Import vom offiziellen Let’s Encrypt-Client sehen Sie sich die dehydrated-Import-Wiki-Seite an.
Offene Aufgaben
- Verwenden Sie molecule für bessere Tests.
Lizenz
MIT
Autoreninformation
Diese Rolle wurde 2016 erstellt und 2017 von Martin V. verbessert.
Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.
ansible-galaxy install martin-v.letsencryptsh