linux-system-roles.certificate

Zertifikatsystemrolle

ansible-lint.yml ansible-test.yml codeql.yml markdownlint.yml python-unit-test.yml tft.yml tft_citest_bad.yml woke.yml

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 -
email 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/
  • RHEL/CentOS/Fedora:

    • Zertifikate: /etc/pki/tls/certs/
    • Schlüssel: /etc/pki/tls/private/

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)

Installieren
ansible-galaxy install linux-system-roles.certificate
Lizenz
mit
Downloads
7.6k