letsencrypt - Создание SSL-сертификатов с помощью Let’s Encrypt
Новое в версии 2.2.
Обзор
- Создание и обновление SSL-сертификатов с помощью Let’s Encrypt. Let’s Encrypt — это бесплатный, автоматизированный и открытый центр сертификации (CA), работающий на благо общественности. Подробнее см. https://letsencrypt.org. Текущая реализация поддерживает вызовы http-01, tls-sni-02 и dns-01.
- Для использования этого модуля необходимо выполнить его дважды. Либо как две разные задачи в одном запуске, либо во время двух запусков. Обратите внимание, что вывод первого запуска необходимо записать и передать во второй запуск в качестве аргумента модуля
data. - Между этими двумя задачами необходимо выполнить необходимые шаги для выбранного вызова любым доступным способом. Для http-01 это означает создание необходимого файла вызова на целевом веб-сервере. Для dns-01 необходимо создать необходимый DNS-запись. tls-sni-02 требует создания SSL-сертификата с соответствующими SubjectAlternativeNames. Данный модуль *не* несет ответственности за выполнение этих шагов.
- Подробную информацию о выполнении этих вызовов можно найти в https://tools.ietf.org/html/draft-ietf-acme-acme-09#section-8. Также обратите внимание на примеры, предоставленные для этого модуля.
- Хотя значения по умолчанию выбраны таким образом, чтобы модуль мог использоваться с центром сертификации Let’s Encrypt, его можно использовать с любым сервисом, использующим протокол ACME v1 или v2. Предупреждение: Поддержка ACME v2 в настоящее время находится на стадии эксперимента, так как производственный конечный пункт ACME v2 Let’s Encrypt все еще находится в стадии разработки.
- Должен быть указан как минимум один из
destиfullchain_dest.
Требования
Ниже перечислены требования, необходимые на хосте, на котором выполняется этот модуль.
- python >= 2.6
- openssl
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| account_email | Адрес электронной почты, связанный с этой учетной записью. Будет использоваться для предупреждений о истечении срока действия сертификата. | |
| account_key_content (добавлено в 2.5) | Содержание RSA или Elliptic Curve ключа учетной записи Let's Encrypt. Взаимоисключающие с account_key_src. Требуется, если account_key_src не используется.Предупреждение: содержимое будет записано во временный файл, который будет удален Ansible при завершении модуля. Поскольку это важный закрытый ключ — он может использоваться для изменения ключа учетной записи или для аннулирования сертификатов без знания их закрытых ключей —, это может быть неприемлемо. | |
| account_key_src | Путь к файлу, содержащему RSA или Elliptic Curve ключ учетной записи Let's Encrypt. RSA ключи можно создать с помощью openssl rsa .... Эллиптические кривые ключи можно создать с помощью openssl ecparam -genkey .... Взаимоисключающие с account_key_content. Требуется, если account_key_content не используется.Псевдонимы: account_key | |
| acme_directory | По умолчанию: https://acme-staging.api.letsencrypt.org/directory | Используемый каталог ACME. Это URL-адрес точки входа для доступа к API сервера CA. По соображениям безопасности значение по умолчанию установлено на тестовый сервер Let's Encrypt. Это создаст технически корректные, но недоверенные сертификаты. Вы можете найти URL-адреса тестовых конечных точек здесь: https://letsencrypt.org/docs/staging-environment/
Производственный URL-адрес каталога ACME v1 Let's Encrypt, который создает надлежащие доверенные сертификаты, составляет https://acme-v01.api.letsencrypt.org/directory. |
| acme_version (добавлено в 2.5) |
| Версия ACME конечной точки. Должно быть 1 для классической конечной точки ACME Let's Encrypt или 2 для новой конечной точки ACME v2.
Предупреждение: Поддержка ACME v2 в настоящее время находится на стадии эксперимента, так как производственный конечный пункт ACME v2 Let’s Encrypt все еще находится в стадии разработки. Код протестирован на последней тестовой точке, а также на тестовом сервере Pebble, но могут быть ошибки, которые проявятся только с более новой версией этих или с производственной конечной точкой ACME v2. |
| agreement | URI документа об условиях обслуживания, с которыми вы соглашаетесь при использовании сервиса ACME v1 по адресу acme_directory.По умолчанию используется последнее значение, полученное из URL-адреса acme_directory.Этот параметр будет использоваться только при acme_version равно 1. | |
| chain_dest (добавлено в 2.5) | По умолчанию: None | Если указано, промежуточный сертификат будет записан в этот файл. Псевдонимы: chain |
| challenge |
| Выполняемый вызов. |
| csr обязательно | Файл, содержащий CSR для нового сертификата. Можно создать с помощью openssl req ....CSR может содержать несколько Subject Alternate Names, но каждый из них приведет к отдельному вызову, который необходимо выполнить для подписания CSR. Примечание: закрытый ключ, используемый для создания CSR, *не должен* быть ключом учетной записи. Это плохая идея с точки зрения безопасности, и Let's Encrypt не примет CSR. Псевдонимы: src | |
| data | Данные для проверки текущих вызовов. Это необходимо указать только для второго запуска модуля. Значение, которое необходимо использовать здесь, будет предоставлено предыдущим использованием данного модуля. Дополнительные сведения см. в примерах. | |
| dest | Целевой файл для сертификата. Требуется, если fullchain_dest не указан.Псевдонимы: cert | |
| fullchain_dest (добавлено в 2.5) | Целевой файл для полного набора цепочек (т.е. сертификата, за которым следуют промежуточные сертификаты). Требуется, если dest не указан.Псевдонимы: fullchain | |
| remaining_days | По умолчанию: 10 | Количество дней, оставшихся до истечения срока действия сертификата. Если cert_days < remaining_days, он будет обновлен. Если сертификат не обновлен, значения возврата модуля не будут включать challenge_data. |
| terms_agreed (добавлено в 2.5) | По умолчанию: no | Логическое значение, указывающее, согласны ли вы с условиями обслуживания. Серверы ACME могут потребовать, чтобы это значение было true. Этот параметр будет использоваться только при acme_version не равно 1. |
| validate_certs (добавлено в 2.5) | По умолчанию: yes | Указывает, будут ли проверены сертификаты TLS при вызовах в каталог ACME.
Предупреждение: Должен только устанавливаться в false в тестовых целях, например, при тестировании на локальном сервере Pebble. |
Примеры
### Example with HTTP challenge ###
- name: Create a challenge for sample.com using a account key from a variable.
letsencrypt:
account_key_content: "{{ account_private_key }}"
csr: /etc/pki/cert/csr/sample.com.csr
dest: /etc/httpd/ssl/sample.com.crt
register: sample_com_challenge
# Alternative first step:
- name: Create a challenge for sample.com using a account key from hashi vault.
letsencrypt:
account_key_content: "{{ lookup('hashi_vault', 'secret=secret/account_private_key:value') }}"
csr: /etc/pki/cert/csr/sample.com.csr
fullchain_dest: /etc/httpd/ssl/sample.com-fullchain.crt
register: sample_com_challenge
# Alternative first step:
- name: Create a challenge for sample.com using a account key file.
letsencrypt:
account_key_src: /etc/pki/cert/private/account.key
csr: /etc/pki/cert/csr/sample.com.csr
dest: /etc/httpd/ssl/sample.com.crt
fullchain_dest: /etc/httpd/ssl/sample.com-fullchain.crt
register: sample_com_challenge
# perform the necessary steps to fulfill the challenge
# for example:
#
# - copy:
# dest: /var/www/html/{{ sample_com_challenge['challenge_data']['sample.com']['http-01']['resource'] }}
# content: "{{ sample_com_challenge['challenge_data']['sample.com']['http-01']['resource_value'] }}"
# when: sample_com_challenge is changed
- name: Let the challenge be validated and retrieve the cert and intermediate certificate
letsencrypt:
account_key_src: /etc/pki/cert/private/account.key
csr: /etc/pki/cert/csr/sample.com.csr
dest: /etc/httpd/ssl/sample.com.crt
fullchain_dest: /etc/httpd/ssl/sample.com-fullchain.crt
chain_dest: /etc/httpd/ssl/sample.com-intermediate.crt
data: "{{ sample_com_challenge }}"
### Example with DNS challenge against production ACME server ###
- name: Create a challenge for sample.com using a account key file.
letsencrypt:
account_key_src: /etc/pki/cert/private/account.key
account_email: myself@sample.com
src: /etc/pki/cert/csr/sample.com.csr
cert: /etc/httpd/ssl/sample.com.crt
challenge: dns-01
acme_directory: https://acme-v01.api.letsencrypt.org/directory
# Renew if the certificate is at least 30 days old
remaining_days: 60
register: sample_com_challenge
# perform the necessary steps to fulfill the challenge
# for example:
#
# - route53:
# zone: sample.com
# record: "{{ sample_com_challenge.challenge_data['sample.com']['dns-01'].record }}"
# type: TXT
# ttl: 60
# # Note: route53 requires TXT entries to be enclosed in quotes
# value: "{{ sample_com_challenge.challenge_data['sample.com']['dns-01'].resource_value }}"
# when: sample_com_challenge is changed
#
# Alternative way:
#
# - route53:
# zone: sample.com
# record: "{{ item.key }}"
# type: TXT
# ttl: 60
# # Note: item.value is a list of TXT entries, and route53
# # requires every entry to be enclosed in quotes
# value: "{{ item.value | map('regex_replace', '^(.*)$', ''\1'' ) | list }}"
# with_dict: sample_com_challenge.challenge_data_dns
# when: sample_com_challenge is changed
- name: Let the challenge be validated and retrieve the cert and intermediate certificate
letsencrypt:
account_key_src: /etc/pki/cert/private/account.key
account_email: myself@sample.com
src: /etc/pki/cert/csr/sample.com.csr
cert: /etc/httpd/ssl/sample.com.crt
fullchain: /etc/httpd/ssl/sample.com-fullchain.crt
chain: /etc/httpd/ssl/sample.com-intermediate.crt
challenge: dns-01
acme_directory: https://acme-v01.api.letsencrypt.org/directory
remaining_days: 60
data: "{{ sample_com_challenge }}"
Значения возврата
Общие значения возврата описаны здесь, следующие поля уникальны для этого модуля:
| Ключ | Возвращённое значение | Описание | |
|---|---|---|---|
| account_uri строка | изменённое | URI учётной записи ACME. | |
| authorizations сложное | изменённое | Данные авторизации ACME. | |
| authorization словарь | успех | Объект авторизации ACME. См. https://tools.ietf.org/html/draft-ietf-acme-acme-09#section-7.1.4 | |
| cert_days целое число | успех | Количество дней, в течение которых сертификат остаётся действительным. | |
| challenge_data сложное | изменённое | Данные вызова для каждого домена/типа вызова. | |
| resource строка | изменённое | Ресурс вызова, который должен быть создан для валидации. Пример: .well-known/acme-challenge/evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA | |
| resource_value строка | изменённое | Значение, которое ресурс должен выдать для валидации. Пример: IlirfxKKXA...17Dt3juxGJ-PCt92wr-oA | |
| record строка | изменённое и вызов dns-01 | Полное имя записи DNS для вызова. Пример: _acme-challenge.example.com | |
| challenge_data_dns словарь | изменённое | Список значений TXT для каждой записи DNS, если вызов dns-01. | |
| finalization_uri строка | изменённое | URI завершения ACME. | |
| order_uri строка | изменённое | URI заказа ACME. | |
Статус
Этот модуль помечен как превью, что означает, что его интерфейс не гарантируется обратной совместимостью.
Автор
- Michael Gruener (@mgruener)
Подсказка
Если вы заметите какие-либо проблемы в этой документации, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.5/modules/letsencrypt_module.html