danvaida.letsencrypt

Statut de construction Galaxy

Rôle Ansible Let's Encrypt

Obtient des certificats TLS via ACME de Let's Encrypt.

Une fois que vous avez complété le(s) défi(s) et obtenu le(s) certificat(s), vous êtes responsable de leur configuration sur vos serveurs web.

Exigences

  • openssl
  • Python >= 2.7.9

Variables de rôle

  • letsencrypt_certs_dir : Chemin vers le répertoire de travail, où tous les CSR, clés et certificats seront stockés.

  • letsencrypt_account_key_name : Nom de la clé RSA du compte Let's Encrypt.

  • letsencrypt_account_key_size : Taille de la clé RSA du compte Let's Encrypt.

  • letsencrypt_certs_to_generate : Liste des certificats à générer.

    • account_email : Adresse e-mail à échanger avec le serveur ACME. Vous recevrez des avertissements sur l'expiration des certificats.

    • account_key : Chemin vers le fichier de clé RSA.

    • acme_directory : Point de terminaison de l'API ACME. Utilise par défaut l'environnement de test de Let's Encrypt.

    • agreement : URI du document TOS avec lequel vous êtes d'accord.

    • challenge : Le type de défi accepté.

    • csr : Chemin vers le fichier CSR.

    • dest : Chemin vers le fichier de certificat résultant (où vous souhaitez l'enregistrer).

    • remaining_days : Nombre de jours pendant lesquels le certificat reste valide.

Dépendances

N/A

Exemple de Playbook

Dans cet exemple, nous demandons un certificat à Let's Encrypt, bien que, en théorie, ce module Ansible devrait être compatible avec n'importe quel serveur ACME.

Nous avons trois étapes :

  1. créer CSR, clé et demande de délivrance de certificat
  2. compléter le défi (enregistrement DNS dans Route53 dans ce cas)
  3. demander la validation du défi et obtenir le certificat.
    - name: Étape ACME 1
      hosts: localhost
      connection: local
      roles:
        - role: letsencrypt
          letsencrypt_certs_dir:         './files/production/certs'
          letsencrypt_account_key_name:  'letsencrypt_account'
          letsencrypt_account_key_size:  2048
          letsencrypt_certs_to_generate:
            - domain: 'votre-domaine.com'
              key_size: 2048
              account_email: '[email protected]'
              account_key: "{{ letsencrypt_certs_dir }}/{{ letsencrypt_account_key_name }}.key"
              challenge: 'dns-01'
              agreement: 'https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf'
              csr: "{{ letsencrypt_certs_dir }}/votre-domaine.com/votre.csr"
              dest: "{{ letsencrypt_certs_dir }}/votre-domaine.com/domaine.crt"
              acme_directory: 'https://acme-v01.api.letsencrypt.org/directory'
          tags: letsencrypt

      tasks:
        - name: La liste des enregistrements Route53 à créer doit être définie comme fait
          set_fact:
            route53_records_to_add: "{{
              route53_records_to_add | default([]) +
              [{'zone': item.1.domain,
              'record': item.0.challenge_data[item.1.domain]['dns-01']['resource'] + '.' + item.1.domain + '.',
              'ttl': 300,
              'type': 'TXT',
              'value': '\"' + item.0.challenge_data[item.1.domain]['dns-01']['resource_value'] + '\"' }]
              }}"
          with_together:
            - "{{ letsencrypt_acme_step_one }}"
            - "{{ letsencrypt_certs_to_obtain | default([]) }}"
          when: item.1.domain == item.0.item.domain
          tags: route53

    - name: Résolution du défi ACME (enregistrement DNS dans Route53)
      hosts: localhost
      connection: local
      roles:
        - role: route53
          tags: route53

    - name: Étape ACME 2
      hosts: localhost
      connection: local
      pre_tasks:
        - name: Nous devrions attendre que les changements DNS se propagent
          pause: minutes=1

      roles:
        - role: letsencrypt
          letsencrypt_acme_step: two
          tags: letsencrypt

La réalisation d'autres types de défi devrait être tout aussi simple et opaque pour ce rôle.

Tests

Les tests reposent sur le type de défi DNS et se réalisent via AWS Route53.

Si vous souhaitez exécuter les tests dans l'environnement Docker fourni, exécutez les commandes suivantes :

$ cd /path/to/ansible-roles/letsencrypt
$ ansible-galaxy install \
    --force \
    --role-file=./tests/requirements.yml \
    --roles-path=./tests/dependencies
$ docker build \
    --no-cache \
    --pull \
    --tag ansible-roles-test \
    tests/support
$ docker run \
    --rm \
    --interactive \
    --tty \
    --volume $PWD:/etc/ansible/roles/letsencrypt \
    --volume $PWD/tests/dependencies:/etc/ansible/roles/letsencrypt/tests/roles:ro \
    --env AWS_ACCESS_KEY=$AWS_ACCESS_KEY \
    --env AWS_SECRET_KEY=$AWS_SECRET_KEY \
    --workdir /etc/ansible/roles/letsencrypt/tests \
    ansible-roles-test

À faire

  • Supporter d'autres types de défi
  • Supporter d'autres API de services DNS (c'est-à-dire Cloud DNS)
  • Intégration avec certains rôles de serveurs web (c'est-à-dire NGINX, Apache)
  • Supporter le renouvellement
  • Supporter plusieurs versions d'Ansible et distributions
  • Mettre à jour Ansible dans l'image Docker des tests pour pouvoir ne pas spécifier l'accord pour le défi DNS.

Licence

Ce projet est sous licence GNU GPL v3.0.

Informations sur l'auteur

Rôle créé par Dan Vaida.

Contributions

Voir la liste À faire. Les contributions sont les bienvenues.

À propos du projet

Obtains TLS certificates through ACME from Let's Encrypt.

Installer
ansible-galaxy install danvaida.letsencrypt
Licence
lgpl-3.0
Téléchargements
225
Propriétaire
sysadmin & solutions architect