znerol.certhub
Rôle Ansible : Certhub
Installe certhub et git-gau
sur des serveurs linux contrôlés par systemd
.
Exigences
- Git
- OpenSSL
- Rsync si la machine cible fonctionne en tant que serveur SSL/TLS.
- Soit
certbot
,dehydrated
oulego
lorsque la machine cible fonctionne comme contrôleur.
Variables du Rôle
Ce rôle contient plusieurs fichiers de tâche
. Le fichier de tâche principal
en importe seulement certains :
- certhub-system-setup.yml : Crée l'utilisateur et le groupe
certhub
, le répertoire de configuration et prépare le répertoire personnel. - certhub-software-setup.yml : Récupère et installe
certhub
etgit-gau
. - certhub-git-setup.yml : Configure
user.name
etuser.email
de git. - certhub-repo-setup.yml : Initialise le dépôt git local
certs
.
Les fichiers de tâches suivants contiennent des étapes de configuration supplémentaires :
- certbot-noroot-config.yml : Simplifie l'utilisation de
certbot
en tant qu'utilisateur non privilégiécerthub
en plaçant un fichiercli.ini
approprié.
Les fichiers de tâches suivants contiennent des étapes pour configurer l'acquisition et le déploiement des certificats.
- Environnement pour les unités systemd : Variables contenant des chemins vers des fichiers d'environnement respectés par toutes les unités systemd certhub.
- repo-push-units.yml : Met en place les unités
systemd
responsables de pousser le dépôt certs vers les serveurs SSL/TLS dès qu'il change. - certbot-run-units.yml : Met en place les unités
systemd
responsables de la délivrance/renouvellement d'un certificat et aussi de sa surveillance pour expiration (contrôleur). - lego-run-units.yml : Met en place les unités
systemd
responsables de la délivrance/renouvellement d'un certificat et aussi de sa surveillance pour expiration (contrôleur). - cert-export-units.yml : Met en place les unités
systemd
responsables du déploiement d'un certificat sur un serveur SSL/TLS, recharge les services concernés et/ou envoie les certificats vers des destinations spécifiées.
Variables pour certhub-system-setup.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir 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"
Variables pour certhub-software-setup.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir 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"
Les variables certhub_certhub_releases
et certhub_gitgau_releases
contiennent des urls et des checksums de toutes les versions publiques. Définissez certhub_certhub_version
et certhub_gitgau_version
pour spécifier une version particulière.
Variables pour certhub-git-setup.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir defaults/main.yml
):
certhub_git_user_name: "{{ certhub_user_name }}"
certhub_git_user_email: "{{ certhub_user_name }}@{{ ansible_fqdn }}"
Variables pour certhub-repo-setup.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir defaults/main.yml
):
certhub_repo_init_path: "{{ certhub_repo_path }}"
certhub_repo_init_message: Init
La configuration du dépôt git est ignorée lorsque certhub_repo_init_path
est une chaîne vide.
Variables pour certbot-noroot-config.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir 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"
La variable certhub_certbot_cli_ini_content
peut être utilisée pour fournir une configuration supplémentaire pour certbot. Par exemple, staging=true
pour sélectionner l'environnement de staging lors de l'évaluation.
Environnement pour les unités systemd
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir defaults/main.yml
):
# Fichier d'environnement optionnel partagé par toutes les instances et services certhub.
certhub_env_path: "{{ certhub_config_dir_path }}/env"
# Fichier d'environnement optionnel par instance partagé par tous les services certhub.
certhub_cert_env_path: "{{ certhub_config_dir_path}}/{{ certhub_cert_slug }}.env"
# Fichier d'environnement optionnel par service partagé par toutes les instances de service certhub.
certhub_unit_env_path: "{{ certhub_config_dir_path}}/{{ certhub_unit_prefix }}.env"
# Fichier d'environnement optionnel par instance et par service.
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
Utilisez ces variables dans des tâches personnalisées copy
ou template
pour peupler les fichiers env
avec la configuration des services certhub. Remarque : Il n'y a pas de valeur par défaut pour certhub_unit_prefix
. Cette variable doit être définie avec l'un des préfixes d'unités de service certhub valides actuellement :
- certhub-cert-expiry
- certhub-cert-export
- certhub-cert-reload
- certhub-cert-send
- certhub-certbot-run
- certhub-dehydrated-run
- certhub-lego-run
Variables pour repo-push-units.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir 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) }}"
Spécifiez certhub_repo_push_remote
pour remplacer complètement le remote.
Variables pour certbot-run-units.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir 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"
Définissez certhub_cert_slug
pour spécifier l'instance de certificat.
Variables pour lego-run-units.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir 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"
Définissez certhub_cert_slug
pour spécifier l'instance de certificat.
Variables pour cert-export-units.yml
Les variables disponibles sont listées ci-dessous, ainsi que leurs valeurs par défaut (voir 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"
Définissez certhub_cert_slug
pour spécifier l'instance de certificat. Une liste des unités de service systemd qui devraient être rechargées chaque fois que l'instance de certificat change peut être définie à l'aide de certhub_cert_services
. Une liste des destinations où le certificat doit être envoyé peut être spécifiée dans certhub_cert_destinations
.
Dépendances
Aucune.
Exemple de Playbook
```
name: Configuration du contrôleur Certhub hosts: certhub-controller tasks:
name: Dépendances Certhub présentes package: name: - certbot - git - lexicon - openssl state: present
name: Certhub présent import_role: name: znerol.certhub
name: Configuration du Serveur TLS hosts: tls-server tasks:
name: Dépendances Certhub présentes package: name: - git - openssl state: present
name: Certhub présent import_role: name: znerol.certhub
name: Configuration des unités de poussée du dépôt delegate_to: nom-du-contrôleur-certhub import_role: name: znerol.certhub tasks_from: repo-push-units.yml
name: Configuration du Certificat TLS hosts: tls-server tasks:
vars: certhub_cert_services: - nginx import_role: name: znerol.certhub tasks_from: cert-export-units.yml
name: Configuration des unités de certbot delegate_to: nom-du-contrôleur-certhub import_role: name: znerol.certhub tasks_from: certbot-run-units.yml
name: CSR Certbot installé delegate_to: nom-du-contrôleur-certhub 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: Configuration certbot installée delegate_to: nom-du-contrôleur-certhub 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: Environnement d'unité certbot configuré delegate_to: nom-du-contrôleur-certhub 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="myusername@example.com" LEXICON_CLOUDFLARE_TOKEN="cloudflare-api-token"
Licence
BSD
ansible-galaxy install znerol.certhub