letsencrypt
Роль 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.
У нас три этапа:
- создать CSR, ключ и отправить запрос на выпуск сертификата
- завершить вызов (DNS-запись в Route53 в данном случае)
- запросить проверку вызова и выдачу сертификата.
- 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