letsencrypt

Статус сборки Galaxy

Роль Ansible Let's Encrypt

Получает TLS-сертификаты через ACME от Let's Encrypt.

После завершения вызовов и получения сертификатов, вы несете ответственность за их настройку на выбранных вами веб-серверах.

Требования

  • openssl
  • Python >= 2.7.9

Переменные роли

  • letsencrypt_certs_dir: Путь к рабочему каталогу, где будут храниться все CSR, ключи и сертификаты.

  • letsencrypt_account_key_name: Имя RSA-ключа аккаунта Let's Encrypt.

  • letsencrypt_account_key_size: Размер RSA-ключа аккаунта Let's Encrypt.

  • letsencrypt_certs_to_generate: Список сертификатов для генерации.

    • account_email: Электронный адрес, который будет использован для обмена с сервером ACME. Вы получите предупреждения о необходимости обновления сертификата.

    • account_key: Путь к файлу RSA-ключа.

    • acme_directory: Конечная точка API ACME. По умолчанию используется Staging от Let's Encrypt.

    • agreement: URI к документу условий службы, с которым вы соглашаетесь.

    • challenge: Принятый тип вызова.

    • csr: Путь к файлу CSR.

    • dest: Путь к результирующему файлу сертификата (где вы хотите его сохранить).

    • remaining_days: Количество дней, на которое сертификат будет действителен.

Зависимости

Не применимо

Пример плейбука

В этом примере мы запрашиваем сертификат от Let's Encrypt, хотя теоретически этот модуль Ansible должен быть совместим с любым сервером ACME.

У нас три этапа:

  1. создать CSR, ключ и отправить запрос на выпуск сертификата
  2. завершить вызов (DNS-запись в Route53 в данном случае)
  3. запросить проверку вызова и выдачу сертификата.
    - name: Шаг 1 ACME
      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: 'your-domain.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 }}/your-domain.com/your.csr"
              dest: "{{ letsencrypt_certs_dir }}/your-domain.com/domain.crt"
              acme_directory: 'https://acme-v01.api.letsencrypt.org/directory'
          tags: letsencrypt

      tasks:
        - name: Список записей Route53 для создания должен быть установлен в качестве факта
          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: Решение вызова ACME (DNS-запись в Route53)
      hosts: localhost
      connection: local
      roles:
        - role: route53
          tags: route53

    - name: Шаг 2 ACME
      hosts: localhost
      connection: local
      pre_tasks:
        - name: Мы должны подождать, пока изменения DNS распространятся
          pause: minutes=1

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

Завершение других типов вызовов должно быть таким же и непрозрачным для этой роли.

Тестирование

Тесты основаны на типе вызова DNS и решаются через AWS Route53.

Если вы хотите запустить тесты в предоставленной среде Docker, выполните следующие команды:

$ 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

Список дел

  • Поддержка других типов вызовов
  • Поддержка других API служб DNS (например, Cloud DNS)
  • Интеграция с некоторыми ролями веб-серверов (например, NGINX, Apache)
  • Поддержка обновлений
  • Поддержка нескольких версий Ansible и дистрибутивов
  • Обновить Ansible в образе тестирования Docker, чтобы избежать необходимости указывать согласие для вызова DNS.

Лицензия

Этот проект лицензирован на условиях лицензии GNU GPL v3.0.

Информация об авторе

Роль создана Dan Vaida.

Вклад

Смотрите список Сделать. Вклады приветствуются.

О проекте

Obtains TLS certificates through ACME from Let's Encrypt.

Установить
ansible-galaxy install danvaida/ansible-roles-letsencrypt
Лицензия
lgpl-3.0
Загрузки
214
Владелец
sysadmin & solutions architect