felixfontein.acme_certificate
acme_certificate 1.1.1
DIESE ROLLE IST ABGELEGT! BITTE VERWENDEN SIE STATT DER COLLECTION VERSION felixfontein.acme (https://github.com/felixfontein/ansible-acme/)!
Ermöglicht den Erhalt von Zertifikaten von Let's Encrypt mit minimaler Interaktion mit dem Webserver. Der Großteil des Codes wird auf dem Controller ausgeführt, und der Kontoschlüssel wird niemals an die Knoten gesendet.
Die Rolle kann über Ansible Galaxy installiert werden:
ansible-galaxy install felixfontein.acme_certificate
Für Änderungen in dieser Rolle siehe das Änderungsprotokoll.
Beschreibung
Dies ist eine Ansible Rolle, die eine beliebige CA verwendet, die das ACME-Protokoll unterstützt, wie z.B. Let's Encrypt oder Buypass, um TLS/SSL-Zertifikate für Ihren Server auszustellen. Diese Rolle erfordert Ansible 2.8.3 oder neuer und basiert auf dem acme_certificate Modul, das mit Ansible geliefert wird.
Der Hauptvorteil dieses Ansatzes im Vergleich zu anderen ist, dass fast kein Code auf Ihrem Webserver ausgeführt wird: Nur bei der Verwendung von HTTP-Herausforderungen müssen Dateien auf Ihren Webserver kopiert und danach gelöscht werden. Alles andere wird auf Ihrem lokalen Computer ausgeführt!
(Dies betrifft nicht die Installation der Zertifikate; das müssen Sie in einer anderen Rolle selbst tun.)
Anforderungen
Benötigt die Python-Bibliothek cryptography auf dem Controller, die für die verwendete Python-Version verfügbar ist, um das Playbook auszuführen. Falls cryptography
nicht installiert ist, wird derzeit eine passende Version von PyOpenSSL als Rückfalllösung vom Ansible openssl_privatekey
und openssl_csr
Modulen unterstützt.
Die openssl
-Binärdatei muss ebenfalls im ausführbaren Pfad auf dem Controller verfügbar sein. Sie wird vom acme_certificate
Modul benötigt, falls cryptography
nicht installiert ist, und wird zur Validierung der Zertifikatskette verwendet.
Wenn DNS-Herausforderungen verwendet werden, kann es je nach DNS-Anbieter andere Anforderungen geben. Zum Beispiel benötigt das Ansible route53
Modul für Amazons Route 53 das Python-Paket boto
.
Kontoschlüssel Einrichtung
Sie können einen Kontoschlüssel mit dem openssl
-Befehl wie folgt erstellen:
# RSA 4096 Bit Schlüssel
openssl genrsa 4096 -out keys/acme-account.key
# ECC 256 Bit Schlüssel (P-256)
openssl ecparam -name prime256v1 -genkey -out keys/acme-account.key
# ECC 384 Bit Schlüssel (P-384)
openssl ecparam -name secp384r1 -genkey -out keys/acme-account.key
Mit Ansible können Sie das openssl_privatekey
-Modul wie folgt verwenden:
- name: RSA 4096 Schlüssel generieren
openssl_privatekey:
path: keys/acme-account.key
type: RSA
size: 4096
- name: ECC 256 Bit Schlüssel (P-256) generieren
openssl_privatekey:
path: keys/acme-account.key
type: ECC
curve: secp256r1
- name: ECC 384 Bit Schlüssel (P-384) generieren
openssl_privatekey:
path: keys/acme-account.key
type: ECC
curve: secp384r1
Stellen Sie sicher, dass Sie den Kontoschlüssel sicher aufbewahren. Im Gegensatz zu privaten Zertifikatschlüsseln muss er nicht häufig regeneriert werden, und die Widerrufung von damit ausgestellten Zertifikaten ist sehr einfach.
Rollenvariablen
Bitte beachten Sie, dass alle Variablen seit Mai 2020 mit acme_certificate_
beginnen müssen. In den ersten Wochen wird das Modul weiterhin die alten (kurzen) Variablennamen verwenden, wenn die längeren Namen nicht definiert sind. Bitte aktualisieren Sie Ihren Rolleneinsatz so schnell wie möglich.
Hier sind die wichtigsten Variablen:
acme_certificate_acme_account
: Pfad zum privaten ACME-Kontoschlüssel. Muss immer angegeben werden.acme_certificate_acme_email
: Ihre E-Mail-Adresse, die mit dem ACME-Konto verknüpft werden soll. Muss immer angegeben werden.acme_certificate_algorithm
: Der Algorithmus zum Erstellen der privaten Schlüssel. Der Standard ist"rsa"
; andere Optionen sind"p-256"
,"p-384"
oder"p-521"
für die NIST-Elliptischen Kurvenprime256v1
,secp384r1
undsecp521r1
.acme_certificate_key_length
: Die Bitlänge, die für RSA-Privatschlüssel verwendet werden soll. Der Standardwert ist 4096.acme_certificate_key_name
: Der Basename zum Speichern der Schlüssel und Zertifikate. Der Standardwert ist die erste angegebene Domain, wobei*
durch_
ersetzt wird.acme_certificate_keys_path
: Wo die Schlüssel und Zertifikate gespeichert werden. Der Standardwert ist"keys/"
.acme_certificate_keys_old_path
: Wo alte Schlüssel und Zertifikate kopiert werden sollen; wird verwendet, wennacme_certificate_keys_old_store
auf true gesetzt ist. Der Standardwert ist"keys/old/"
.acme_certificate_keys_old_store
: Wenn auftrue
gesetzt, werden Kopien der alten Schlüssel und Zertifikate erstellt. Die Kopien werden im Verzeichnis gespeichert, das durchacme_certificate_keys_old_store
angegeben ist. Der Standardwert istfalse
.acme_certificate_keys_old_prepend_timestamp
: Ob Kopien alter Schlüssel und Zertifikate mit dem aktuellen Datum und der Uhrzeit vorangestellt werden sollen. Der Standardwert istfalse
.acme_certificate_ocsp_must_staple
: Ob ein Zertifikat mit der OCSP Must Staple-Erweiterung angefordert wird. Der Standardwert istfalse
.acme_certificate_agreement
: Dokument der Nutzungsbedingungen, dem der Benutzer zustimmt. Der Standardwert isthttps://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
.acme_certificate_acme_directory
: Das zu verwendende ACME-Verzeichnis. Der Standardwert isthttps://acme-v02.api.letsencrypt.org/directory
, das ist der aktuelle Produktions-ACME v2 Endpunkt von Let's Encrypt.acme_certificate_acme_version
: Die Versionsnummer des ACME-Verzeichnisses. Der Standardwert ist 2. Verwenden Sie 1 für ACME v1.acme_certificate_challenge
: Der zu verwendende Herausforderungs-Typ. Solltehttp-01
für HTTP-Herausforderungen (erfordert Zugriff auf den Webserver) oderdns-01
für DNS-Herausforderungen (erfordert Zugriff auf den DNS-Anbieter) sein.acme_certificate_root_certificate
: Das Wurzelzertifikat für das ACME-Verzeichnis. Der Standardwert isthttps://letsencrypt.org/certs/isrgrootx1.pem
für das Wurzelzertifikat von Let's Encrypt.acme_certificate_deactivate_authzs
: Obauthz
(Berechtigungen) danach deaktiviert werden sollen. Der Standardwert isttrue
. Auffalse
setzen, umauthz
wiederverwenden zu können.acme_certificate_modify_account
: Ob das ACME-Konto erstellt werden soll (sofern es nicht existiert) und die Kontaktdaten (E-Mail-Adresse) aktualisiert werden sollen. Der Standardwert isttrue
. Auffalse
setzen, wenn Sie dasacme_account
Modul verwenden möchten, um Ihr ACME-Konto zu verwalten (nicht von dieser Rolle erledigt).acme_certificate_privatekey_mode
: Welchen Dateimodus für die private Schlüsseldatei verwendet werden soll. Der Standardwert ist"0600"
, was bedeutet, dass nur der Eigentümer Lese- und Schreibzugriff hat, aber niemand sonst (außer möglicherweiseroot
).acme_certificate_select_chain
: (Nur verwendbar mit Ansible 2.10+) Muss im hier beschriebenen Format hier vorliegen. Ermöglicht die Auswahl der zu verwendenden Zertifikatskette;acme_certificate_root_certificate
muss in Verbindung damit verwendet werden.
HTTP-Herausforderungen
Für HTTP-Herausforderungen definieren die folgenden Variablen, wie die Herausforderungen auf dem (fremden) Webserver bereitgestellt werden können:
acme_certificate_server_location
: Ort, von dem.well-known/acme-challenge/
bereitgestellt wird. Standardwert ist/var/www/challenges
.acme_certificate_http_become
: Argument fürbecome:
für diefile
undcopy
Aufgaben. Der Standardwert istfalse
.acme_certificate_http_challenge_user
: Der Benutzer, dem die Herausforderungsdateien gehören. Der Standardwert istroot
.acme_certificate_http_challenge_group
: Die Gruppe, der die Herausforderungsdateien gehören. Der Standardwert isthttp
.acme_certificate_http_challenge_folder_mode
: Der Modus, der für den Herausforderungsordner verwendet wird. Der Standardwert ist0750
(oktal).acme_certificate_http_challenge_file_mode
: Der Modus, der für die Herausforderungsdateien verwendet wird. Der Standardwert ist0640
(oktal).
Der folgende Abschnitt zeigt, wie man nginx für HTTP-Herausforderungen konfiguriert. Andere Webserver können auf ähnliche Weise konfiguriert werden.
Nginx-Konfiguration
Angenommen, für eine Ihrer TLS/SSL-geschützten Domains verwenden Sie eine HTTP-zu-HTTPS-Umleitung. Angenommen, es sieht so aus:
server {
listen example.com:80;
server_name example.com *.example.com;
return 301 https://www.example.com$request_uri;
}
Um der Rolle acme_certificate
zu ermöglichen, etwas unter http://*.example.com/.well-known/acme-challenge/
abzulegen, können Sie dies ändern:
server {
listen example.com:80;
server_name example.com *.example.com;
location /.well-known/acme-challenge/ {
alias /var/www/challenges/;
try_files $uri =404;
}
location / {
return 301 https://www.example.com$request_uri;
}
}
Mit dieser Nginx-Konfiguration werden alle anderen URLs auf *.example.com
und example.com
weiterhin umgeleitet, während alles in *.example.com/.well-known/acme-challenge/
von /var/www/challenges
bereitgestellt wird. Wenn Sie den Standort von /var/www/challenges
anpassen, müssen Sie auch acme_certificate_server_location
ändern.
Sie können sogar noch verbessern, indem Sie alle URLs in *.example.com/.well-known/acme-challenge/
, die nicht auf eine gültige Datei in /var/www/challenges
verweisen, ebenfalls an Ihren HTTPS-Server umleiten. Eine Möglichkeit, dies zu tun, ist:
server {
listen example.com:80;
server_name example.com *.example.com;
location /.well-known/acme-challenge/ {
alias /var/www/challenges/;
try_files $uri @forward_https;
}
location @forward_https {
return 301 https://www.example.com$request_uri;
}
location / {
return 301 https://www.example.com$request_uri;
}
}
Mit dieser Konfiguration wird Ihr HTTP-Server so handeln, als ob der Standort /.well-known/acme-challenge/
nicht angegeben ist, wenn /var/www/challenges/
leer ist.
DNS-Herausforderungen
Wenn DNS-Herausforderungen verwendet werden, definieren die folgenden Variablen, wie die Herausforderungen erfüllt werden können:
acme_certificate_dns_provider
: muss einer vonroute53
,hosttech
undns1
sein. Jeder benötigt weitere Informationen:- Für
route53
(Amazon Route 53) müssen die Anmeldeinformationen alsacme_certificate_aws_access_key
undacme_certificate_aws_secret_key
übergeben werden. - Für
hosttech
(hosttech GmbH, benötigt externes hosttech_dns_record Modul). - Für
ns1
(ns1.com) muss der Schlüssel für Ihr API-Konto alsacme_certificate_ns1_secret_key
übergeben werden. Außerdem hängt es von dem externen Modulns1_record
ab. Wenn man die Standardverzeichnisstruktur und -einstellungen annimmt, müssen möglicherweise 2 Dateien auf die Maschine heruntergeladen werden, auf der das Playbook ausgeführt wird:
curl --create-dirs -L -o ~/.ansible/plugins/module_utils/ns1.py https://github.com/ns1/ns1-ansible-modules/raw/master/module_utils/ns1.py curl --create-dirs -L -o ~/.ansible/plugins/modules/ns1_record.py https://github.com/ns1/ns1-ansible-modules/raw/master/library/ns1_record.py
- Für
Bitte beachten Sie, dass der DNS-Herausforderungs-Code nicht perfekt ist. Die Funktionalität für Route 53, Hosttech und NS1 wurde getestet. Ein Punkt, der noch nicht abgeschlossen ist, ist, dass der Code versucht, die DNS-Zone aus der Domain zu extrahieren, indem er die letzten beiden Komponenten, die durch Punkte getrennt sind, nimmt. Dies wird beispielsweise bei .co.uk
-Domains oder anderen geschachtelten Zonen fehlschlagen.
Unterstützung für weitere DNS-Anbieter kann hinzugefügt werden, indem tasks/dns-NAME-create.yml
und tasks/dns-NAME-cleanup.yml
Dateien mit ähnlichem Inhalt wie in den bestehenden Dateien hinzugefügt werden.
Kontoschlüssel-Konvertierung
Bitte beachten Sie, dass diese Ansible-Rolle erwartet, dass der Let's Encrypt-Kontoschlüssel im PEM-Format und nicht im JWK-Format vorliegt, das vom offiziellen Let's Encrypt-Client certbot verwendet wird. Wenn Sie einen Kontoschlüssel mit dem offiziellen Client erstellt haben und diesen Schlüssel nun mit dieser Ansible-Rolle verwenden möchten, müssen Sie ihn konvertieren. Ein Werkzeug, das dies tun kann, ist pem-jwk.
Generierte Dateien
Angenommen, Sie haben TLS-Schlüssel für www.example.com
erstellt. Sie müssen die relevanten Dateien auf Ihren Webserver kopieren. Die Ansible-Rolle hat die folgenden Dateien erstellt:
keys/www.example.com.key
: dies ist der private Schlüssel für das Zertifikat. Stellen Sie sicher, dass niemand darauf zugreifen kann.keys/www.example.com.pem
: dies ist das Zertifikat selbst.keys/www.example.com-chain.pem
: dies sind die Zwischenzertifikate, die für einen Vertrauenspfad benötigt werden.keys/www.example.com.cnf
: dies ist eine OpenSSL-Konfigurationsdatei, die zum Erstellen der Zertifikatsanforderung verwendet wird. Sie können sie sicher löschen.keys/www.example.com.csr
: dies ist die Zertifikatsanforderung, um das Zertifikat zu erhalten. Sie können sie sicher löschen.keys/www.example.com-fullchain.pem
: dies ist das Zertifikat, das mit den Zwischenzertifikaten kombiniert ist.keys/www.example.com-rootchain.pem
: dies sind die Zwischenzertifikate, die mit dem Wurzelzertifikat kombiniert sind. Sie benötigen dies möglicherweise für OCSP Stapling.keys/www.example.com-root.pem
: dies ist das Wurzelzertifikat von Let's Encrypt.
Für die Konfiguration Ihres Webservers benötigen Sie den privaten Schlüssel (keys/www.example.com.key
) und entweder das Zertifikat mit den kombinierten Zwischenzertifikaten in einer Datei (keys/www.example.com-fullchain.pem
) oder das Zertifikat und die Zwischenzertifikate als zwei separate Dateien (keys/www.example.com.pem
und keys/www.example.com-chain.pem
). Wenn Sie OCSP Stapling verwenden möchten, benötigen Sie auch keys/www.example.com-rootchain.pem
.
Um diese Dateien auf Ihren Webserver zu bringen, könnten Sie die Aufgaben wie folgt hinzufügen:
- name: private Schlüssel kopieren
copy:
src: keys/{{ item }}
dest: /etc/ssl/private/
owner: root
group: root
mode: "0400"
with_items:
- www.example.com.key
notify: reload webserver
- name: Zertifikate kopieren
copy:
src: keys/{{ item }}
dest: /etc/ssl/server-certs/
owner: root
group: root
mode: "0444"
with_items:
- www.example.com-rootchain.pem
- www.example.com-fullchain.pem
- www.example.com.pem
notify: reload webserver
Die Webserver-Konfiguration könnte folgendermaßen aussehen (für nginx):
server {
listen www.example.com:443 ssl; # IPv4: an die IP hören, auf die www.example.com verweist
listen [::]:443 ssl; # IPv6: an localhost hören
server_name www.example.com;
# Nur TLS 1.0 und 1.2 zulassen, mit einer sehr selektiven Menge an Chiffren.
# Laut dem SSL Lab's SSL-Server-Test wird dies blockieren:
# - Android 2.3.7
# - IE 6 und 8 unter Windows XP
# - Java 6, 7 und 8
# Wenn das für Sie nicht akzeptabel ist, wählen Sie andere Chiffrenlisten. Suchen Sie zum Beispiel
# auf https://wiki.mozilla.org/Security/Server_Side_TLS
ssl_protocols TLSv1.2 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "-ALL !ADH !aNULL !EXP !EXPORT40 !EXPORT56 !RC4 !3DES !eNULL !NULL !DES !MD5 !LOW ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES256-SHA256 ECDHE-ECDSA-AES256-SHA ECDHE-RSA-AES256-SHA DHE-RSA-AES256-SHA";
# Die Zertifikatskette, die an den Browser gesendet wird, sowie der private Schlüssel.
# Stellen Sie sicher, dass nur Ihr Webserver während des Ladeprozesses auf Ihren privaten Schlüssel zugreifen kann (was standardmäßig geschieht, wenn der Benutzer root ist).
ssl_certificate /etc/ssl/server-certs/www.example.com-fullchain.pem;
ssl_certificate_key /etc/ssl/private/www.example.com.key;
# Für OCSP Stapling benötigen wir einen DNS-Resolver. Hier sind nur öffentliche Quad9- und Google-DNS-Server angegeben; ich würde sie mit den DNS-Servern Ihres Hosters voranstellen. Die IPs finden Sie normalerweise in /etc/resolv.conf auf Ihrem Webserver.
resolver 9.9.9.9 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 10s;
# OCSP Stapling aktivieren. Nginx kümmert sich automatisch um das Abrufen der OCSP-Daten. Weitere Einzelheiten finden Sie unter https://wiki.mozilla.org/Security/Server_Side_TLS#OCSP_Stapling.
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/server-certs/www.example.com-rootchain.pem;
# Aktivieren eines SSL-Sitzungscaches. Passen Sie die Zahlen je nach Nutzung Ihrer Seite an.
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 30m;
ssl_session_tickets off;
# HSTS sollten Sie nur mit richtigen Zertifikaten verwenden; die von Let's Encrypt sind dafür in Ordnung, selbstsignierte jedoch nicht. Weitere Einzelheiten finden Sie auf MozillaWiki:
# https://wiki.mozilla.org/Security/Server_Side_TLS#HSTS:_HTTP_Strict_Transport_Security
add_header Strict-Transport-Security "max-age=3155760000;";
charset utf-8;
access_log /var/log/nginx/www.example.com.log combined;
error_log /var/log/nginx/www.example.com.log error;
location / {
root /var/www/www.example.com;
index index.html;
}
}
Abhängigkeiten
Diese Rolle hat keine Abhängigkeiten zu anderen Rollen.
Beispiel-Playbook
Diese Rolle kann wie folgt verwendet werden. Beachten Sie, dass mehrere Zertifikate angegeben werden und Variablen verwendet werden, die für alle Zertifikate global gelten:
---
- name: Zertifikate für Webserver abrufen
hosts: webserver
vars:
acme_certificate_acme_account: 'keys/acme-account.key'
acme_certificate_acme_email: '[email protected]'
# Für HTTP-Herausforderungen:
acme_certificate_server_location: '/var/www/challenges/'
acme_certificate_http_challenge_user: root
acme_certificate_http_challenge_group: http
acme_certificate_http_challenge_folder_mode: "0750"
acme_certificate_http_challenge_file_mode: "0640"
# Für DNS-Herausforderungen mit Route53:
acme_certificate_dns_provider: route53
acme_certificate_aws_access_key: ERSETZEN_SIE_DURCH_IHREN_ACCESS_KEY
acme_certificate_aws_secret_key: ERSETZEN_SIE_DURCH_IHREN_SECRET_KEY
# Für DNS-Herausforderungen mit ns1:
# acme_certificate_dns_provider: ns1
# acme_certificate_ns1_secret_key: ERSETZEN_SIE_DURCH_IHREN_SECRET_KEY
roles:
- role: acme_certificate
acme_certificate_domains: ['example.com', 'www.example.com']
# Verwenden Sie DNS-Herausforderungen:
acme_certificate_challenge: dns-01
# Die Zertifikatsdateien werden gespeichert unter:
# keys/example.com.key (privater Schlüssel)
# keys/example.com.csr (Zertifikatsanforderung)
# keys/example.com.pem (Zertifikat)
# keys/example.com.cnf (OpenSSL-Konfiguration zur Erstellung der CSR – kann sicher gelöscht werden)
# keys/example.com-chain.pem (Zwischenzertifikat)
# keys/example.com-fullchain.pem (Zertifikat mit Zwischenzertifikat)
# keys/example.com-root.pem (Wurzelzertifikat)
# keys/example.com-rootchain.pem (Zwischenzertifikat mit Wurzelzertifikat)
- role: acme_certificate
acme_certificate_domains: ['another.example.com']
acme_certificate_key_name: 'another.example.com-rsa'
acme_certificate_key_length: 4096
# Verwenden Sie HTTP-Herausforderungen:
acme_certificate_challenge: http-01
# Die Zertifikatsdateien werden gespeichert unter:
# keys/another.example.com-rsa.key (privater Schlüssel)
# keys/another.example.com-rsa.csr (Zertifikatsanforderung)
# keys/another.example.com-rsa.pem (Zertifikat)
# keys/another.example.com-rsa.cnf (OpenSSL-Konfiguration zur Erstellung der CSR – kann sicher gelöscht werden)
# keys/another.example.com-rsa-chain.pem (Zwischenzertifikat)
# keys/another.example.com-rsa-fullchain.pem (Zertifikat mit Zwischenzertifikat)
# keys/another.example.com-rsa-root.pem (Wurzelzertifikat)
# keys/another.example.com-rsa-rootchain.pem (Zwischenzertifikat mit Wurzelzertifikat)
- role: acme_certificate
acme_certificate_domains: ['another.example.com']
acme_certificate_key_name: 'another.example.com-ecc'
acme_certificate_algorithm: 'p-256'
# Verwenden Sie HTTP-Herausforderungen (Standard für die Herausforderung ist http-01).
# Die Zertifikatsdateien werden gespeichert unter:
# keys/another.example.com-ecc.key (privater Schlüssel)
# keys/another.example.com-ecc.csr (Zertifikatsanforderung)
# keys/another.example.com-ecc.pem (Zertifikat)
# keys/another.example.com-ecc.cnf (OpenSSL-Konfiguration zur Erstellung der CSR – kann sicher gelöscht werden)
# keys/another.example.com-ecc-chain.pem (Zwischenzertifikat)
# keys/another.example.com-ecc-fullchain.pem (Zertifikat mit Zwischenzertifikat)
# keys/another.example.com-ecc-root.pem (Wurzelzertifikat)
# keys/another.example.com-ecc-rootchain.pem (Zwischenzertifikat mit Wurzelzertifikat)
Lizenz
Die MIT-Lizenz (MIT)
Copyright (c) 2018-2020 Felix Fontein
Hiermit wird jedem, der eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung umzugehen, einschließlich ohne Einschränkung der Rechte, sie zu nutzen, zu kopieren, zu ändern, zusammenzuführen, zu veröffentlichen, zu vertreiben, unterzulizenzieren und/oder Kopien der Software zu verkaufen und Personen zu gestatten, denen die Software bereitgestellt wird, dies zu tun, unter den folgenden Bedingungen:
Der obige Copyright-Hinweis und diese Erlaubniserklärung sind in allen Kopien oder wesentlichen Teilen der Software enthalten.
DIE SOFTWARE WIRD "WIE BESEHEN" OHNE GARANTIE JEDER ART, WEDER AUSDRÜCKLICH NOCH IMPLIZIT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-INHABER FÜR IRGENDEINEN ANSPRUCH, SCHADEN ODER ANDERE HAFTUNG HAFTBAR, OB IN EINER KLAGE DER VERTRAGSHAFTUNG, UNGEFÄHR ODER ANDERWEITIG, DIE AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN IN DER SOFTWARE ENTSTEHT.
Autor Informationen
Die Homepage für diese Rolle ist https://github.com/felixfontein/acme-certificate/. Bitte verwenden Sie den Fehlerverfolgungsdienst, um Probleme zu melden.
Wrapper of Ansible's included acme_certificate module, whose aim is that almost no code is executed on the webserver. Requires the Python cryptography library as well as the OpenSSL binary installed locally and available on executable path.
ansible-galaxy install felixfontein.acme_certificate