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

Build Status travis Build Status semaphore

  1. Verwenden Sie molecule für bessere Tests.

Lizenz

MIT

Autoreninformation

Diese Rolle wurde 2016 erstellt und 2017 von Martin V. verbessert.

Über das Projekt

Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.

Installieren
ansible-galaxy install martin-v.letsencryptsh
GitHub Repository
Lizenz
mit
Downloads
756
Besitzer
Freelance software developer and IT consultant