linux-system-roles.certificate
Rola Systemu Certyfikatów
Rola do zarządzania wydawaniem i odnawianiem certyfikatów TLS/SSL.
Podstawowe użycie:
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: self-sign
roles:
- linux-system-roles.certificate
Na systemie opartym na RPM certyfikat zostanie umieszczony w /etc/pki/tls/certs/mycert.crt
, a klucz w /etc/pki/tls/private/mycert.key
.
Wymagania
Zobacz poniżej.
Wymagania zbioru
Rola wymaga zewnętrznych zbiorów tylko do zarządzania węzłami rpm-ostree
. Proszę uruchomić następujące polecenie, aby je zainstalować, jeśli potrzebujesz zarządzać węzłami rpm-ostree
:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Zmienne
Parametr | Opis | Typ | Wymagany | Domyślny |
---|---|---|---|---|
certificate_wait | Czy zadanie powinno czekać na wydanie certyfikatu. | bool | nie | tak |
certificate_requests | Lista słowników reprezentujących każdy certyfikat do wydania. Zobacz certificate_requests. | lista | nie | - |
certificate_requests
Uwaga: Pola takie jak common_name
, country
, state
, locality
, organization
, organizational_unit
, email
, key_usage
i extended_key_usage
, które mogą być zawarte w żądaniu certyfikatu, są zdefiniowane przez RFC 5280.
Uwaga: Należy pamiętać, że CA może nie uwzględnić wszystkich żądanych pól. Na przykład, nawet jeśli w żądaniu znajduje się country: US
, CA może wystawić certyfikat bez country
w jego temacie.
Uwaga: Pola dns
, email
i ip
są używane do definiowania alternatywnych nazw tematu (SAN).
Parametr | Opis | Typ | Wymagany | Domyślny |
---|---|---|---|---|
name | Nazwa certyfikatu. Pełna ścieżka może być użyta do wyboru katalogu, w którym zostaną zapisane pliki. | str | tak | - |
ca | CA, która wyda certyfikat. Zobacz CAs and Providers. | str | tak | - |
dns | Domeny (lub lista domen), które mają być zawarte w certyfikacie. Może również zapewnić domyślną wartość dla common_name. | str lub lista | nie | - |
Email (lub lista emaili) do umieszczenia w certyfikacie. | str lub lista | nie | - | |
ip | IP lub lista IP, które mają być umieszczone w certyfikacie. IP mogą być w wersji IPv4, IPv6 lub obu. Może również zapewnić domyślną wartość dla common_name. | str lub lista | nie | - |
auto_renew | Określa, czy certyfikat ma być automatycznie odnawiany przed jego wygaśnięciem. | bool | nie | tak |
owner | Nazwa użytkownika (lub identyfikator użytkownika) dla plików certyfikatu i klucza. | str | nie | Użytkownik uruchamiający Ansible |
group | Nazwa grupy (lub identyfikator grupy) dla plików certyfikatu i klucza. | str | nie | Grupa uruchamiająca Ansible |
mode | Uprawnienia systemu plików dla plików certyfikatu i klucza. | raw | nie | - |
key_size | Generowanie kluczy o określonym rozmiarze w bitach. | int | nie | 2048 - Zobacz key_size |
common_name | Żądana nazwa wspólna dla certyfikatu. | str | nie | Zobacz common_name |
country | Kod kraju żądany dla certyfikatu. | str | nie | - |
state | Stan żądany dla certyfikatu. | str | nie | - |
locality | Miejscowość żądana dla certyfikatu (zazwyczaj miasto). | str | nie | - |
organization | Organizacja żądana dla certyfikatu. | str | nie | - |
organizational_unit | Jednostka organizacyjna żądana dla certyfikatu. | str | nie | - |
contact_email | Kontaktowy email żądany dla certyfikatu. | str | nie | - |
key_usage | Dozwolone użycie klucza dla certyfikatu. Aby zobaczyć ważne wartości, zobacz: key_usage. | lista | nie | Zobacz key_usage |
extended_key_usage | Atrybuty zaawansowanego użycia klucza, które mają być obecne w żądaniu certyfikatu. | lista | nie | Zobacz extended_key_usage |
run_before | Komenda, która powinna być wykonana przed zapisaniem certyfikatu. Zobacz run hooks. | str | nie | - |
run_after | Komenda, która powinna być wykonana po zapisaniu certyfikatu. Zobacz run hooks. | str | nie | - |
principal | Principal Kerberos. | str | nie | - |
provider | Metoda wykorzystywana do żądania i zarządzania certyfikatem. | str | nie | Różni się w zależności od CA |
common_name
Jeśli common_name
nie jest ustawione, rola spróbuje użyć pierwszej wartości dns
lub ip
jako domyślnej. Jeśli dns
i ip
są również nie ustawione, common_name
nie zostanie uwzględnione w certyfikacie.
key_size
Zalecane minimalne wartości dla rozmiaru klucza certyfikatu różnią się w zależności od organizacji i zmieniają się z czasem. W celu zapewnienia bezpiecznych ustawień domyślna minimalna wartość dla key_size
będzie w przyszłości zwiększana.
Jeśli chcesz, aby twoje certyfikaty miały zawsze ten sam rozmiar key_size
przy odnawianiu, ustaw tę zmienną na pożądaną wartość.
key_usage
Ważne wartości dla key_usage
to:
- digitalSignature
- nonRepudiation
- keyEncipherment
- dataEncipherment
- keyAgreement
- keyCertSign
- cRLSign
- encipherOnly
- decipherOnly
Domyślne wartości dla key_usage
to:
- digitalSignature
- keyEncipherment
extended_key_usage
Każdy ważny oid może być użyty do ustawienia jednego lub więcej extended_key_usage
. Oprócz tego istnieje również lista znanych aliasów, które będą rozpoznawane przez rolę:
- 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
Jeśli extended_key_usage
nie jest ustawione, rola domyślnie ustawi:
- id-kp-serverAuth
- id-kp-clientAuth
run hooks
Czasami trzeba wykonać polecenie tuż przed odnowieniem certyfikatu i inne polecenie tuż po. Aby to zrobić, użyj run_before
i run_after
.
Wartości przekazane do run_before
i run_after
będą opakowane i przechowywane w plikach skryptów powłoki, które później będą wykonane przez dostawcę.
CAs i Dostawcy
CA | Dostawcy | Opis CA | Wymagania |
---|---|---|---|
self-sign | certmonger* | Wydawaj certyfikaty samopodpisane z lokalnej CA. | |
ipa | certmonger* | Wydawaj certyfikaty przy użyciu CA FreeIPA. | Host musi być zarejestrowany w serwerze FreeIPA. |
* Domyślny dostawca.
CA reprezentuje certyfikaty CA, które będą używane do wydawania i podpisywania żądanego certyfikatu. Dostawca reprezentuje metodę wykorzystywaną do wysłania żądania certyfikatu do CA i następnie uzyskania podpisanego certyfikatu.
Jeśli użytkownik wybierze CA self-sign
przy pomocy certmonger
, a następnie zdecyduje się zmienić dostawcę na openssl
, certyfikaty CA używane w obu przypadkach muszą być takie same. Należy zauważyć, że openssl
nie jest jeszcze wspieranym dostawcą i jest wymieniane tutaj jedynie jako przykład.
Certmonger i SELinux
Jeśli SELinux jest włączony, usługa certmonger
może tylko pisać lub edytować pliki w katalogach, gdzie obecny jest kontekst cert_t
.
Dodatkowo, jeśli skrypty wykonywane przez parametry run_before
i run_after
muszą pisać lub edytować pliki, te skrypty również muszą mieć kontekst cert_t
przed wykonaniem roli.
Możesz używać Roli Systemu selinux
, aby zarządzać kontekstami SELinux.
Dla uzyskania więcej informacji o wymaganiach certmonger
i SELinux, zobacz certmonger_selinux(8) man pages.
Przykłady
Wydanie certyfikatu samopodpisanego
Wydaj certyfikat dla *.example.com
i umieść go w standardowym katalogu dla dystrybucji.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: *.example.com
ca: self-sign
roles:
- linux-system-roles.certificate
Możesz znaleźć katalogi dla każdej dystrybucji w następujących lokalizacjach:
Debian/Ubuntu:
- Certyfikaty:
/etc/ssl/localcerts/certs/
- Klucze:
/etc/ssl/localcerts/private/
- Certyfikaty:
RHEL/CentOS/Fedora:
- Certyfikaty:
/etc/pki/tls/certs/
- Klucze:
/etc/pki/tls/private/
- Certyfikaty:
Wybór miejsca, w którym umieścić certyfikaty
Wydaj certyfikat i klucz oraz umieść je w określonej lokalizacji. Poniższy przykład tworzy plik certyfikatu w
/another/path/mycert.crt
i plik klucza w /another/path/mycert.key
.
---
- hosts: webserver
vars:
certificate_requests:
- name: /another/path/mycert
dns: *.example.com
ca: self-sign
roles:
- linux-system-roles.certificate
Wydanie certyfikatów z wieloma DNS, IP i emailami
---
- 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: self-sign
roles:
- linux-system-roles.certificate
Ustawianie wspólnych opcji subiektu
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
common_name: www.example.com
ca: self-sign
country: US
state: NY
locality: Nowy Jork
organization: Red Hat
organizational_unit: platforma
email: [email protected]
roles:
- linux-system-roles.certificate
Ustawianie rozmiaru klucza certyfikatu
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: self-sign
key_size: 4096
roles:
- linux-system-roles.certificate
Ustawianie "Użycia klucza" i "Rozszerzonego użycia klucza" (EKU)
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: self-sign
key_usage:
- digitalSignature
- nonRepudiation
- keyEncipherment
extended_key_usage:
- id-kp-clientAuth
- id-kp-serverAuth
roles:
- linux-system-roles.certificate
Nie czekaj na wydanie certyfikatu
Wydanie certyfikatu może potrwać kilka minut w zależności od CA. Dlatego możliwe jest również zażądanie certyfikatu, ale nie czekanie na niego.
Ta konfiguracja dotyczy wszystkich certyfikatów: jeśli certificate_wait
jest ustawione na nie
, rola nie czeka na żaden certyfikat.
---
- hosts: webserver
vars:
certificate_wait: false
certificate_requests:
- name: mycert
dns: www.example.com
ca: self-sign
roles:
- linux-system-roles.certificate
Ustawianie principal
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: self-sign
principal: HTTP/[email protected]
roles:
- linux-system-roles.certificate
Wybór, by nie odnawiać certyfikatu automatycznie
Domyślnie certyfikaty generowane przez rolę są ustawione na automatyczne odnawianie. Aby wyłączyć to zachowanie, ustaw auto_renew: nie
.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: self-sign
auto_renew: nie
roles:
- linux-system-roles.certificate
Użycie FreeIPA do wydania certyfikatu
Jeśli twój host jest zarejestrowany w serwerze FreeIPA, masz również możliwość użycia jego CA do wydania certyfikatu. Aby to zrobić, ustaw ca: ipa
.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
principal: HTTP/[email protected]
ca: ipa
roles:
- linux-system-roles.certificate
Uruchamianie polecenia przed lub po wydaniu certyfikatu
Czasami trzeba wykonać polecenie tuż przed odnowieniem certyfikatu i inne polecenie tuż po. Aby to zrobić, użyj run_before
i run_after
.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: self-sign
run_before: systemctl stop webserver.service
run_after: systemctl start webserver.service
roles:
- linux-system-roles.certificate
Ustawianie właściciela i grupy certyfikatu
Jeśli używasz certyfikatu dla usługi, na przykład httpd, musisz ustawić właściciela i grupę certyfikatu, który będzie miał certyfikat. W następującym przykładzie właściciel i grupa są ustawione na httpd.
---
- hosts: webserver
vars:
certificate_requests:
- name: mycert
dns: www.example.com
ca: self-sign
owner: httpd
group: httpd
roles:
- linux-system-roles.certificate
Należy pamiętać, że możesz również używać UID i GID zamiast nazw użytkowników i grup.
Kompatybilność
Obecnie wspiera CentOS 7+, RHEL 7+, Fedora. Był testowany z Debianem 10.
rpm-ostree
Zobacz README-ostree.md
Licencja
MIT
Informacje o autorze
Sergio Oliveira Campos (@seocam)
Role for managing TLS/SSL certificate issuance and renewal
ansible-galaxy install linux-system-roles.certificate