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

Build Status travis Build Status semaphore

  1. 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..

À propos du projet

Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.

Installer
ansible-galaxy install martin-v.letsencryptsh
Licence
mit
Téléchargements
756
Propriétaire
Freelance software developer and IT consultant