martin-v.letsencryptsh
Déshydraté
Installez et configurez déshydraté
. Créez un utilisateur pour réduire les privilèges et configurez cron pour le renouvellement des certificats.
Déshydraté travaille avec vos clés privées, soyez donc prudent et examinez le code de ce rôle Ansible et du script déshydraté utilisé.
Pour un exemple d'installation avec nginx comme proxy https, consultez le rôle Ansible martin-v/ansible-nginx_https_only.
Exigences
Le rôle s'installe sur l'hôte :
- openssl
- curl
- sed
- grep
- mktemp
- git
Ce rôle nécessite un serveur web qui sert le répertoire configuré dans dehydrated_challengesdir
(par défaut : /var/www/dehydrated/
) à l'emplacement http://<votre-domaine>/.well-known/acme-challenge/
pour tous les domaines de demande de certificat.
Variables du rôle
Variables requises :
dehydrated_contactemail
Adresse pour le compte letsencrypt. Principalement pour les avis d'expiration des certificats, mais cela ne devrait pas arriver si le travail cron fonctionne correctement.
dehydrated_contactemail: certmaster@example.com
dehydrated_letsencrypt_agreed_terms
Pour accepter les conditions d'utilisation de letsencrypt, définissez la variable dehydrated_letsencrypt_agreed_terms
sur l'URL de la licence actuelle. Vous trouverez l'URL actuelle à l'adresse https://acme-v01.api.letsencrypt.org/terms.
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains
Liste des domaines pour les demandes de certificats. Pour chaque ligne, un certificat sera créé dans le dossier /etc/dehydrated/certs/
avec le nom du premier domaine de la ligne. Le premier domaine est le nom commun, les autres dans la ligne seront des noms alternatifs pour le certificat.
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert
Les certificats doivent être lisibles par des services comme apache ou dovecot. Mais seuls les services spécifiques devraient être autorisés à lire le certificat pour ce service. Il faut donc changer le propriétaire/groupe à une valeur spécifique pour chaque certificat. Pour des raisons de sécurité, cela ne peut être fait que par l'utilisateur root.
Pour avoir une solution générique, la variable dehydrated_deploy_cert
existe. Cette variable doit contenir un script bash pour le déploiement des certificats. Les tâches typiques lors du déploiement consistent à copier le certificat dans d'autres répertoires, à changer le propriétaire/les permissions des fichiers et à redémarrer les services.
Ce code est appelé de manière similaire aux hooks déshydratés normaux, mais après l'exécution complète de déshydraté et avec les permissions root. Le code est appelé une fois pour chaque certificat qui a été produit.
Paramètres :
DOMAIN
Le nom de domaine principal, c'est-à-dire le nom commun du certificat (CN).KEYFILE
(Nom de fichier : privkey.pem) Le chemin du fichier contenant la clé privée.CERTFILE
(Nom de fichier : cert.pem) Le chemin du fichier contenant le certificat signé.FULLCHAINFILE
(Nom de fichier : fullchain.pem) Le chemin du fichier contenant la chaîne de certificats complète.CHAINFILE
(Nom de fichier : chain.pem) Le chemin du fichier contenant le(s) certificat(s) intermédiaire(s).TIMESTAMP
(Nom de fichier : chain.pem) Horodatage à quel moment le certificat spécifié a été créé.
Exemple :
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
dehydrated_run_cron_on_every_ansible_run
Ce rôle déclenche à chaque exécution le script cron pour créer ou mettre à jour les certificats. Pour désactiver ce comportement, utilisez :
dehydrated_run_cron_on_every_ansible_run: false
Variables optionnelles :
dehydrated_challengesdir
Répertoire pour les fichiers de défi acme. Votre serveur web devrait rendre ce répertoire public à l'emplacement http://<votre-domaine>/.well-known/acme-challenge/
pour tous les domaines listés auparavant. Ce répertoire sera créé s'il n'existe pas. Il ne doit être accessible en écriture que pour l'utilisateur déshydraté et lisible par votre serveur web, cela sera imposé par ce rôle.
dehydrated_challengesdir: /var/www/dehydrated/
Plus de variables
Il existe également d'autres variables inhabituelles pour les super utilisateurs qui ont besoin de plus de contrôle, pour plus de détails, consultez defaults/main.yml
.
Dépendances
Aucune.
Exemple de playbook
- hosts: all
remote_user: root
vars_files:
- dehydrated_vars.yml
roles:
- martin-v.dehydrated
Exemple de fichier de variables
dehydrated_contactemail: [email protected]
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
Conseils
Pour créer des certificats lors du déploiement d'Ansible, vous pouvez appeler le script cron régulier : shell: "/etc/cron.weekly/dehydrated"
. Le dossier tests
contient un exemple complet en cours d'exécution.
Pour un import à partir du client officiel letsencrypt, consultez la page wiki import de déshydraté.
Tâches ouvertes
- Utilisez molecule pour de meilleurs tests.
Licence
MIT
Informations sur l'auteur
Ce rôle a été créé en 2016 et amélioré en 2017 par Martin V..
Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.
ansible-galaxy install martin-v.letsencryptsh