linux-system-roles.certificate
Zertifikatsystemrolle
Rolle zur Verwaltung der Ausstellung und Erneuerung von TLS/SSL-Zertifikaten
Linux-Systemrolle zur Ausstellung und Erneuerung von SSL-Zertifikaten.
Einfache Verwendung:
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: selbstsigniert
roles:
- linux-system-roles.certificate
Auf einem RPM-basierten System wird das Zertifikat in /etc/pki/tls/certs/mycert.crt
und der Schlüssel in /etc/pki/tls/private/mycert.key
abgelegt.
Anforderungen
Siehe unten
Sammlungsanforderungen
Die Rolle benötigt externe Sammlungen nur für die Verwaltung von rpm-ostree
-Knoten. Bitte führen Sie den folgenden Befehl aus, um diese zu installieren, wenn Sie rpm-ostree
-Knoten verwalten müssen:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Variablen
Parameter | Beschreibung | Typ | Erforderlich | Standard |
---|---|---|---|---|
certificate_wait | Ob die Aufgabe auf die Ausstellung des Zertifikats warten soll. | bool | nein | ja |
certificate_requests | Eine Liste von Dictionaries, die jedes zu gewährende Zertifikat darstellen. Siehe certificate_requests. | list | nein | - |
certificate_requests
Hinweis: Felder wie common_name
, country
, state
, locality
, organization
, organizational_unit
, email
, key_usage
und extended_key_usage
, die in der Zertifikatsanforderung enthalten sein können, sind durch die RFC 5280 definiert.
Hinweis: Beachten Sie, dass die CA nicht alle angeforderten Felder akzeptieren könnte. Wenn eine Anfrage zum Beispiel country: US
enthält, könnte die CA das Zertifikat ohne country
im Subjekt ausstellen.
Hinweis: Die Felder dns
, email
und ip
werden verwendet, um die Subject Alternative Names (SAN) zu definieren.
Parameter | Beschreibung | Typ | Erforderlich | Standard |
---|---|---|---|---|
name | Name des Zertifikats. Ein vollständiger Pfad kann verwendet werden, um das Verzeichnis zu wählen, in dem die Dateien gespeichert werden. | str | ja | - |
ca | CA, die das Zertifikat ausstellen wird. Siehe CAs und Anbieter. | str | ja | - |
dns | Domäne (oder Liste von Domänen), die im Zertifikat enthalten sein sollen. Kann auch den Standardwert für common_name bereitstellen. | str oder list | nein | - |
E-Mail (oder Liste von E-Mails), die im Zertifikat enthalten sein sollen. | str oder list | nein | - | |
ip | IP, oder Liste von IPs, die im Zertifikat enthalten sein sollen. IPs können sowohl IPv4 als auch IPv6 sein. Kann auch den Standardwert für common_name bereitstellen. | str oder list | nein | - |
auto_renew | Gibt an, ob das Zertifikat automatisch vor dem Ablaufdatum erneuert werden soll. | bool | nein | ja |
owner | Benutzername (oder Benutzer-ID) für die Zertifikat- und Schlüsseldateien. | str | nein | Benutzer, der Ansible ausführt |
group | Gruppenname (oder Gruppen-ID) für die Zertifikat- und Schlüsseldateien. | str | nein | Gruppe, die Ansible ausführt |
mode | Die Dateisystemberechtigungen für die Zertifikat- und Schlüsseldateien. | raw | nein | - |
key_size | Generiert Schlüssel mit einer spezifischen Schlüssellänge in Bit. | int | nein | 2048 - Siehe key_size |
common_name | Common Name, der für das Zertifikatssubjekt angefordert wird. | str | nein | Siehe common_name |
country | Ländercode, der für das Zertifikatssubjekt angefordert wird. | str | nein | - |
state | Bundesland, das für das Zertifikatssubjekt angefordert wird. | str | nein | - |
locality | Ort, der für das Zertifikatssubjekt angefordert wird (in der Regel Stadt). | str | nein | - |
organization | Organisation, die für das Zertifikatssubjekt angefordert wird. | str | nein | - |
organizational_unit | Abteilung, die für das Zertifikatssubjekt angefordert wird. | str | nein | - |
contact_email | Kontakt-E-Mail, die für das Zertifikatssubjekt angefordert wird. | str | nein | - |
key_usage | Erlaubte Schlüsselverwendung für das Zertifikat. Für gültige Werte siehe: key_usage. | list | nein | Siehe key_usage |
extended_key_usage | Erweiterte Verwendung von Schlüsseln, die in der Zertifikatsanforderung vorhanden sein sollen. | list | nein | Siehe extended_key_usage |
run_before | Befehl, der vor dem Speichern des Zertifikats ausgeführt werden soll. Siehe run hooks. | str | nein | - |
run_after | Befehl, der nach dem Speichern des Zertifikats ausgeführt werden soll. Siehe run hooks. | str | nein | - |
principal | Kerberos-Prinzipal. | str | nein | - |
provider | Die zugrunde liegende Methode zur Anforderung und Verwaltung des Zertifikats. | str | nein | Variiert je nach CA |
common_name
Wenn common_name
nicht festgelegt ist, versucht die Rolle, den ersten Wert von dns
oder ip
als Standardwert zu verwenden. Wenn auch dns
und ip
nicht festgelegt sind, wird common_name
nicht im Zertifikat enthalten sein.
key_size
Die empfohlenen Minimalwerte für die Schlüssellänge eines Zertifikats variieren je nach Organisation über die Zeit. Um sichere Einstellungen zu bieten, wird der Standardminimale Wert für key_size
im Laufe der Zeit erhöht.
Wenn Sie möchten, dass Ihre Zertifikate bei der Erneuerung immer die gleiche key_size
haben, setzen Sie diese Variable auf den gewünschten Wert.
key_usage
Gültige Werte für key_usage
sind:
- digitalSignature
- nonRepudiation
- keyEncipherment
- dataEncipherment
- keyAgreement
- keyCertSign
- cRLSign
- encipherOnly
- decipherOnly
Die Standardwerte für key_usage
sind:
- digitalSignature
- keyEncipherment
extended_key_usage
Jeder gültige OID kann verwendet werden, um eine oder mehrere extended_key_usage
festzulegen. Darüber hinaus gibt es auch eine Liste bekannter Aliase, die von der Rolle erkannt werden:
- id-kp-serverAuth
- id-kp-clientAuth
- id-kp-codeSigning
- id-kp-emailProtection
- id-kp-timeStamping
- id-kp-OCSPSigning
- id-kp-ipsecEndSystem
- id-kp-ipsecTunnel
- id-kp-ipsecUser
Wenn extended_key_usage
nicht festgelegt ist, wird die Rolle standardmäßig zu verwenden:
- id-kp-serverAuth
- id-kp-clientAuth
run hooks
Manchmal müssen Sie einen Befehl kurz vor der Erneuerung eines Zertifikats und einen anderen Befehl kurz danach ausführen. Um dies zu tun, verwenden Sie run_before
und run_after
.
Der Wert, der für run_before
und run_after
angegeben wird, wird in Shell-Skriptdateien eingewickelt und später vom Anbieter ausgeführt.
CAs und Anbieter
CA | Anbieter | CA-Beschreibung | Anforderungen |
---|---|---|---|
selbstsigniert | certmonger* | Ausstellung von selbstsignierten Zertifikaten von einer lokalen CA. | |
ipa | certmonger* | Ausstellung von Zertifikaten über die FreeIPA CA. | Der Host muss in einen FreeIPA-Server eingeschrieben sein. |
* Standardanbieter.
CA steht für die CA-Zertifikate, die zur Ausstellung und Unterzeichnung des angeforderten Zertifikats verwendet werden. Anbieter steht für die Methode, die verwendet wird, um die Zertifikatsanforderung an die CA zu senden und dann das signierte Zertifikat abzurufen.
Wenn ein Benutzer die CA selbstsigniert
mit certmonger
als Anbieter wählt und später beschließt, den Anbieter auf openssl
zu ändern, müssen die in beiden Fällen verwendeten CA-Zertifikate identisch sein. Bitte beachten Sie, dass openssl
noch nicht unterstützt wird und nur als Beispiel hier erwähnt Ist.
Certmonger und SELinux
Wenn SELinux durchgesetzt ist, kann der Dienst certmonger
nur Dateien in Verzeichnissen schreiben oder bearbeiten, in denen der cert_t
-Kontext vorhanden ist.
Darüber hinaus benötigen auch die von run_before
und run_after
ausgeführten Skripte, die Dateien schreiben oder bearbeiten müssen, den cert_t
-Kontext vor der Ausführung der Rolle.
Sie können die Rolle selinux
verwenden, um SELinux-Kontexte zu verwalten.
Für weitere Informationen über certmonger
und die SELinux-Anforderungen siehe certmonger_selinux(8) man-Seiten.
Beispiele
Ausstellung eines selbstsignierten Zertifikats
Stellen Sie ein Zertifikat für *.example.com
aus und platzieren Sie es im Standardverzeichnis für die Verteilung.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: *.example.com
ca: selbstsigniert
roles:
- linux-system-roles.certificate
Die Verzeichnisse für jede Verteilung finden Sie an den folgenden Standorten:
Debian/Ubuntu:
- Zertifikate:
/etc/ssl/localcerts/certs/
- Schlüssel:
/etc/ssl/localcerts/private/
- Zertifikate:
RHEL/CentOS/Fedora:
- Zertifikate:
/etc/pki/tls/certs/
- Schlüssel:
/etc/pki/tls/private/
- Zertifikate:
Auswählen, wo die Zertifikate platziert werden sollen
Stellen Sie ein Zertifikat und einen Schlüssel aus und platzieren Sie diese im angegebenen Standort. Das folgende Beispiel erstellt eine Zertifikatdatei in /another/path/mycert.crt
und eine Schlüsseldatei in /another/path/mycert.key
.
---
- hosts: webserver
vars:
certificate_requests:
- name: /another/path/mycert
dns: *.example.com
ca: selbstsigniert
roles:
- linux-system-roles.certificate
Ausstellung von Zertifikaten mit mehreren DNS, IP und E-Mail
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns:
- www.example.com
- sub1.example.com
- sub2.example.com
- sub3.example.com
ip:
- 192.0.2.12
- 198.51.100.65
- 2001:db8::2:1
email:
- [email protected]
- [email protected]
ca: selbstsigniert
roles:
- linux-system-roles.certificate
Festlegen allgemeiner Subjekteinstellungen
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
common_name: www.example.com
ca: selbstsigniert
country: US
state: NY
locality: New York
organization: Red Hat
organizational_unit: plattform
email: [email protected]
roles:
- linux-system-roles.certificate
Festlegen der Schlüssellänge des Zertifikats
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: selbstsigniert
key_size: 4096
roles:
- linux-system-roles.certificate
Festlegen der "Schlüsselverwendung" und "Erweiterten Schlüsselverwendung" (EKU)
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: selbstsigniert
key_usage:
- digitalSignature
- nonRepudiation
- keyEncipherment
extended_key_usage:
- id-kp-clientAuth
- id-kp-serverAuth
roles:
- linux-system-roles.certificate
Warten Sie nicht auf die Ausstellung des Zertifikats
Die Ausstellung des Zertifikats kann je nach CA einige Minuten dauern. Daher ist es auch möglich, das Zertifikat anzufordern, aber nicht tatsächlich darauf zu warten.
Diese Konfiguration betrifft alle Zertifikate: wenn certificate_wait
auf nein
gesetzt ist, wartet die Rolle nicht auf die Ausstellung eines Zertifikats.
---
- hosts: webserver
vars:
certificate_wait: false
certificate_requests:
- name: mycert
dns: www.example.com
ca: selbstsigniert
roles:
- linux-system-roles.certificate
Festlegen eines Prinzips
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: selbstsigniert
principal: HTTP/[email protected]
roles:
- linux-system-roles.certificate
Wählen Sie die automatische Erneuerung eines Zertifikats nicht aus
Standardmäßig sind Zertifikate, die von der Rolle generiert werden, zur automatischen Erneuerung eingestellt. Um dieses Verhalten zu deaktivieren, setzen Sie auto_renew: nein
.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: selbstsigniert
auto_renew: nein
roles:
- linux-system-roles.certificate
Verwenden von FreeIPA zur Ausstellung eines Zertifikats
Wenn Ihr Host in einen FreeIPA-Server eingebunden ist, haben Sie auch die Möglichkeit, dessen CA zur Ausstellung Ihres Zertifikats zu verwenden. Um dies zu tun, setzen Sie ca: ipa
.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
principal: HTTP/[email protected]
ca: ipa
roles:
- linux-system-roles.certificate
Ausführen eines Befehls vor oder nach der Ausstellung eines Zertifikats
Manchmal müssen Sie einen Befehl kurz vor der Erneuerung eines Zertifikats und einen anderen Befehl kurz danach ausführen. Um dies zu tun, verwenden Sie run_before
und run_after
.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: selbstsigniert
run_before: systemctl stop webserver.service
run_after: systemctl start webserver.service
roles:
- linux-system-roles.certificate
Festlegen des Besitzers und der Gruppe des Zertifikats
Wenn Sie ein Zertifikat für einen Dienst, z. B. httpd, verwenden, müssen Sie den Besitzer und die Gruppe des Zertifikats festlegen, die das Zertifikat besitzen. Im folgenden Beispiel sind der Besitzer und die Gruppe auf httpd gesetzt.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: selbstsigniert
owner: httpd
group: httpd
roles:
- linux-system-roles.certificate
Beachten Sie, dass Sie auch UID und GID anstelle von Benutzer- und Gruppennamen verwenden können.
Kompatibilität
Derzeit unterstützt CentOS 7+, RHEL 7+, Fedora. Es wurde mit Debian 10 getestet.
rpm-ostree
Siehe README-ostree.md
Lizenz
MIT
Autor Informationen
Sergio Oliveira Campos (@seocam)
Role for managing TLS/SSL certificate issuance and renewal
ansible-galaxy install linux-system-roles.certificate