znerol.certhub
Ansible Rolle: Certhub
Installiert certhub und git-gau
auf Linux-Servern, die von systemd
gesteuert werden.
Anforderungen
- Git
- OpenSSL
- Rsync, falls die Zielmaschine als SSL/TLS-Server fungiert.
- Entweder
certbot
,dehydrated
oderlego
, wenn die Zielmaschine als Controller agiert.
Variablen der Rolle
Diese Rolle enthält mehrere task
-Dateien. Die main
-Task-Datei importiert nur einige davon:
- certhub-system-setup.yml: Erstellt den Benutzer und die Gruppe
certhub
, das Konfigurationsverzeichnis und bereitet das Home-Verzeichnis vor. - certhub-software-setup.yml: Beschafft und installiert
certhub
undgit-gau
. - certhub-git-setup.yml: Konfiguriert
git user.name
unduser.email
. - certhub-repo-setup.yml: Initialisiert das lokale Git-Repository
certs
.
Die folgenden Task-Dateien enthalten zusätzliche Konfigurationsschritte:
- certbot-noroot-config.yml: Erleichtert das Ausführen von
certbot
als unprivilegierter Benutzercerthub
, indem eine passendecli.ini
-Datei bereitgestellt wird.
Die folgenden Task-Dateien enthalten Schritte zur Einrichtung der Beschaffung und Bereitstellung von Zertifikaten.
- Umgebung für systemd-Einheiten: Variablen mit Pfaden zu Umgebungsdateien, die von allen certhub systemd-Einheiten anerkannt werden.
- repo-push-units.yml: Richten Sie
systemd
-Einheiten ein, die dafür verantwortlich sind, das Zertifikatsrepository zu SSL/TLS-Servern zu pushen, wann immer es Änderungen gibt. - certbot-run-units.yml: Richten Sie
systemd
-Einheiten ein, die für die Ausstellung/Aktualisierung eines Zertifikats verantwortlich sind und auch deren Ablauf überwachen (Controller). - lego-run-units.yml: Richten Sie
systemd
-Einheiten ein, die für die Ausstellung/Aktualisierung eines Zertifikats verantwortlich sind und auch deren Ablauf überwachen (Controller). - cert-export-units.yml: Richten Sie
systemd
-Einheiten ein, die für die Bereitstellung eines Zertifikats auf einem SSL/TLS-Server verantwortlich sind, beeinflusste Dienste neu laden und/oder die Zertifikate an bestimmte Ziele senden.
Variablen für certhub-system-setup.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_user_group: certhub
certhub_user_name: certhub
certhub_user_shell: /usr/bin/git-shell
certhub_home_dir_path: /var/lib/certhub
certhub_home_dir_mode: 0755
certhub_config_dir_path: /etc/certhub
certhub_config_dir_owner: root
certhub_config_dir_group: root
certhub_config_dir_mode: 0755
certhub_status_dir_path: "{{ certhub_home_dir_path }}/status"
certhub_status_dir_owner: "{{ certhub_user_name }}"
certhub_status_dir_group: "{{ certhub_user_group }}"
certhub_status_dir_mode: 0755
certhub_certs_dir_path: "{{ certhub_home_dir_path }}/certs"
certhub_certs_dir_owner: "{{ certhub_user_name }}"
certhub_certs_dir_group: "{{ certhub_user_group }}"
certhub_certs_dir_mode: 0755
certhub_private_dir_path: "{{ certhub_home_dir_path }}/private"
certhub_private_dir_owner: "{{ certhub_user_name }}"
certhub_private_dir_group: "{{ certhub_user_group }}"
certhub_private_dir_mode: 0700
certhub_repo_path: "{{ certhub_home_dir_path}}/certs.git"
Variablen für certhub-software-setup.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_certhub_version: v1.0.0
certhub_certhub_checksum: "{{ certhub_certhub_releases[certhub_certhub_version]['checksum'] }}"
certhub_certhub_url: "{{ certhub_certhub_releases[certhub_certhub_version]['url'] }}"
certhub_certhub_prefix: /usr/local
certhub_certhub_archive_path: "{{ certhub_private_dir_path }}/certhub-dist-{{ certhub_certhub_version }}.tar.gz"
certhub_gitgau_version: v1.3.0
certhub_gitgau_checksum: "{{ certhub_gitgau_releases[certhub_gitgau_version]['checksum'] }}"
certhub_gitgau_url: "{{ certhub_gitgau_releases[certhub_gitgau_version]['url'] }}"
certhub_gitgau_prefix: /usr/local
certhub_gitgau_archive_path: "{{ certhub_private_dir_path }}/git-gau-dist-{{ certhub_gitgau_version }}.tar.gz"
Die Variablen certhub_certhub_releases
und certhub_gitgau_releases
enthalten URLs und Checksummen aller öffentlichen Releases. Setzen Sie certhub_certhub_version
und certhub_gitgau_version
, um eine bestimmte Version festzulegen.
Variablen für certhub-git-setup.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_git_user_name: "{{ certhub_user_name }}"
certhub_git_user_email: "{{ certhub_user_name }}@{{ ansible_fqdn }}"
Variablen für certhub-repo-setup.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_repo_init_path: "{{ certhub_repo_path }}"
certhub_repo_init_message: Init
Die Einrichtung des Git-Repositorys wird übersprungen, wenn certhub_repo_init_path
der leere String ist.
Variablen für certbot-noroot-config.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_certbot_cli_ini_path: "{{ certhub_home_dir_path }}/.config/letsencrypt/cli.ini"
certhub_certbot_cli_ini_content: ""
certhub_certbot_work_dir: "{{ certhub_private_dir_path }}/certbot/work"
certhub_certbot_logs_dir: "{{ certhub_private_dir_path }}/certbot/logs"
certhub_certbot_config_dir: "{{ certhub_private_dir_path }}/certbot/config"
Die Variable certhub_certbot_cli_ini_content
kann verwendet werden, um zusätzliche Konfigurationen für certbot bereitzustellen. Zum Beispiel staging=true
, um die Staging-Umgebung während der Bewertung auszuwählen.
Umgebung für systemd-Einheiten
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
# Optionales Umgebungsdatei, die von allen Instanzen und certhub-Diensten verwendet wird.
certhub_env_path: "{{ certhub_config_dir_path }}/env"
# Optionale Umgebungsdatei pro Instanz, die von allen certhub-Diensten verwendet wird.
certhub_cert_env_path: "{{ certhub_config_dir_path}}/{{ certhub_cert_slug }}.env"
# Optionale Umgebungsdatei pro Dienst, die von allen Instanzen des certhub-Dienstes verwendet wird.
certhub_unit_env_path: "{{ certhub_config_dir_path}}/{{ certhub_unit_prefix }}.env"
# Optionale Umgebungsdatei pro Instanz und pro Dienst.
certhub_cert_unit_env_path: "{{ certhub_config_dir_path}}/{{ certhub_cert_slug }}.{{ certhub_unit_prefix }}.env"
certhub_env_owner: root
certhub_env_group: "{{ certhub_user_group }}"
certhub_env_mode: 0640
Verwenden Sie diese Variablen in benutzerdefinierten copy
- oder template
-Tasks, um env
-Dateien mit Konfigurationen für certhub-Dienste zu füllen. Hinweis: Es gibt keinen Standardwert für certhub_unit_prefix
. Diese Variable muss auf einen der Präfixe der certhub-Diensteinheit gesetzt werden. Die folgenden Werte sind derzeit gültig:
- certhub-cert-expiry
- certhub-cert-export
- certhub-cert-reload
- certhub-cert-send
- certhub-certbot-run
- certhub-dehydrated-run
- certhub-lego-run
Variablen für repo-push-units.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_repo_push_user: "{{ certhub_user_name }}"
certhub_repo_push_host: "{{ inventory_hostname }}"
certhub_repo_push_path: "{{ certhub_repo_path }}"
certhub_repo_push_remote: "{{ '{:s}@{:s}:{:s}'.format(certhub_repo_push_user, certhub_repo_push_host, certhub_repo_push_path) }}"
certhub_repo_push_path_unit: "{{ lookup('pipe', 'systemd-escape [email protected] ' + certhub_repo_push_remote | quote) }}"
Geben Sie certhub_repo_push_remote
an, um den Remote-Host vollständig zu überschreiben.
Variablen für certbot-run-units.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_cert_slug: "{{ inventory_hostname }}"
certhub_cert_expiry_timer_unit: "certhub-cert-expiry@{{ certhub_cert_slug }}.timer"
certhub_certbot_run_path_unit: "certhub-certbot-run@{{ certhub_cert_slug }}.path"
Setzen Sie certhub_cert_slug
, um die Zertifikatsinstanz anzugeben.
Variablen für lego-run-units.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_cert_slug: "{{ inventory_hostname }}"
certhub_cert_expiry_timer_unit: "certhub-cert-expiry@{{ certhub_cert_slug }}.timer"
certhub_lego_run_path_unit: "certhub-lego-run@{{ certhub_cert_slug }}.path"
Setzen Sie certhub_cert_slug
, um die Zertifikatsinstanz anzugeben.
Variablen für cert-export-units.yml
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
certhub_cert_slug: "{{ inventory_hostname }}"
certhub_cert_export_path_unit: "certhub-cert-export@{{ certhub_cert_slug }}.path"
certhub_cert_services: []
certhub_cert_reload_config_path: "{{ certhub_config_dir_path }}/{{ certhub_cert_slug }}.services-reload.txt"
certhub_cert_reload_path_unit: "certhub-cert-reload@{{ certhub_cert_slug }}.path"
certhub_cert_destinations: []
certhub_cert_send_config_path: "{{ certhub_config_dir_path }}/{{ certhub_cert_slug }}.destinations-send.txt"
certhub_cert_send_path_unit: "certhub-cert-send@{{ certhub_cert_slug }}.path"
Setzen Sie certhub_cert_slug
, um die Zertifikatsinstanz anzugeben. Eine Liste von systemd-Diensteinheiten, die neu geladen werden sollen, wann immer sich die Zertifikatsinstanz ändert, kann mit certhub_cert_services
angegeben werden. Eine Liste von Zielen, an die das Zertifikat gesendet werden soll, kann in certhub_cert_destinations
angegeben werden.
Abhängigkeiten
Keine.
Beispiel-Playbook
- name: Certhub Controller einrichten
hosts: certhub-controller
tasks:
- name: Certhub-Abhängigkeiten vorhanden
package:
name:
- certbot
- git
- lexicon
- openssl
state: present
- name: Certhub vorhanden
import_role:
name: znerol.certhub
- name: TLS-Server einrichten
hosts: tls-server
tasks:
- name: Certhub-Abhängigkeiten vorhanden
package:
name:
- git
- openssl
state: present
- name: Certhub vorhanden
import_role:
name: znerol.certhub
- name: Repo-Push-Einheiten einrichten
delegate_to: name-of-certhub-controller
import_role:
name: znerol.certhub
tasks_from: repo-push-units.yml
- name: TLS-Zertifikatskonfiguration
hosts: tls-server
tasks:
- vars:
certhub_cert_services:
- nginx
import_role:
name: znerol.certhub
tasks_from: cert-export-units.yml
- name: Certbot-Ausführungseinheiten einrichten
delegate_to: name-of-certhub-controller
import_role:
name: znerol.certhub
tasks_from: certbot-run-units.yml
- name: Certbot CSR installiert
delegate_to: name-of-certhub-controller
become: yes
become_user: root
copy:
dest: "{{ certhub_cert_csr_path }}"
owner: root
group: root
mode: 0644
content: |
-----BEGIN CERTIFICATE REQUEST-----
MIH6MIGhAgEAMBYxFDASBgNVBAMMC2V4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
KoZIzj0DAQcDQgAE1XubF1Uc4T595zSzikHAJTkXRlV5Fn5MhVUhr/18bm++5z2j
759NpRh/gbEieCT4sKZ0fUcPWBrLp5zf0CFaYqApMCcGCSqGSIb3DQEJDjEaMBgw
FgYDVR0RBA8wDYILZXhhbXBsZS5jb20wCgYIKoZIzj0EAwIDSAAwRQIhANwIuwCc
45XooSB4bleXURLDGuChxcdFYYSHnnQjArizAiBYefMa83Kk1AJUIArnJ0Rk162D
Fw3tPbiEVAmmvl0/5A==
-----END CERTIFICATE REQUEST-----
- name: Certbot-Konfiguration installiert
delegate_to: name-of-certhub-controller
become: yes
become_user: root
copy:
dest: "{{ certhub_certbot_config_path }}"
owner: root
group: root
mode: 0644
content: |
staging=true
agree-tos=true
register-unsafely-without-email=true
manual-public-ip-logging-ok=true
preferred-challenges=dns
manual=true
manual-auth-hook=/usr/local/lib/certhub/certbot-hooks/hook-lexicon-auth
manual-cleanup-hook=/usr/local/lib/certhub/certbot-hooks/hook-lexicon-cleanup
- name: Certbot-Einheit Umgebung konfiguriert
delegate_to: name-of-certhub-controller
become: yes
become_user: root
vars:
certhub_unit_prefix: certhub-certbot-run
copy:
dest: "{{ certhub_cert_unit_env_path }}"
owner: "{{ certhub_env_owner }}"
group: "{{ certhub_env_group }}"
mode: "{{ certhub_env_mode }}"
content: |
CERTHUB_LEXICON_PROVIDER=cloudflare
LEXICON_CLOUDFLARE_USERNAME="[email protected]"
LEXICON_CLOUDFLARE_TOKEN="cloudflare-api-token"
Lizenz
BSD
ansible-galaxy install znerol.certhub