acme_certificate - Создание сертификатов SSL с помощью конечной точки протокола ACME
Новое в версии 2.2.
Обзор
- Создает и возобновляет сертификаты SSL с помощью центра сертификации, поддерживающего протокол ACME, такого как Let’s Encrypt (https://letsencrypt.org). Подробности см. на https://letsencrypt.org. Текущая реализация поддерживает
http-01иdns-01проверки. - Для использования этого модуля его необходимо выполнить дважды. Либо в виде двух отдельных задач в одном запуске, либо в ходе двух запусков. Обратите внимание, что вывод первого запуска необходимо записать и передать во второй запуск в качестве аргумента модуля
data. - Между этими двумя задачами необходимо выполнить необходимые шаги для выбранной проверки любым доступным способом. Для
http-01это означает создание необходимого файла проверки на целевом веб-сервере. Дляdns-01необходимо создать необходимый DNS-запись. Данный модуль не отвечает за выполнение этих шагов. - Дополнительную информацию о выполнении этих проверок можно найти на https://tools.ietf.org/html/draft-ietf-acme-acme-12#section-8. Также обратите внимание на примеры, предоставленные для данного модуля.
- Хотя по умолчанию модуль настроен для использования с центром сертификации Let’s Encrypt, его можно использовать с любым сервисом, использующим протокол ACME v1 или v2.
- Должен быть указан хотя бы один из
destиfullchain_dest. - Примечание: этот модуль ранее назывался
letsencryptдо Ansible 2.6. Способ использования не изменился.
Псевдонимы: letsencrypt
Требования
Ниже перечислены требования к хосту, на котором выполняется этот модуль.
- python >= 2.6
- openssl
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| account_email | Адрес электронной почты, связанный с этим аккаунтом. Будет использоваться для предупреждений о завершении срока действия сертификата. | |
| account_key_content (добавлено в 2.5) | Содержимое ключа RSA или ключа эллиптической кривой аккаунта ACME. Взаимоисключающее с account_key_src.Требуется, если не используется account_key_src. Предупреждение: содержимое будет записано во временный файл, который будет удалён Ansible по завершении модуля. Поскольку это важный закрытый ключ — он может использоваться для изменения ключа аккаунта или для отзыва ваших сертификатов без знания их закрытых ключей —, это может быть неприемлемо. | |
| account_key_src | Путь к файлу, содержащему ключ RSA или ключ эллиптической кривой аккаунта ACME. Ключи 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 (для протокола ACME v1). Это создаст технически корректные, но ненадёжные сертификаты. Все тестовые конечные точки Let's Encrypt можно найти здесь: https://letsencrypt.org/docs/staging-environment/
Для Let's Encrypt URL каталога в производственной среде для ACME v1 — https://acme-v01.api.letsencrypt.org/directory, а URL каталога в производственной среде для ACME v2 — https://acme-v02.api.letsencrypt.org/directory.
Предупреждение: До сих пор модуль был протестирован только с Let's Encrypt (тестовой и производственной средой) и с тестовым сервером Pebble (https://github.com/letsencrypt/Pebble). |
| acme_version (добавлено в 2.5) |
| Версия ACME конечной точки. Должно быть 1 для классической конечной точки ACME Let's Encrypt или 2 для новой стандартной конечной точки ACME v2. |
| agreement | URI документа пользовательского соглашения, с которым вы соглашаетесь при использовании сервиса ACME v1 по адресу acme_directory.По умолчанию используется последнее значение, полученное из URL acme_directory.Этот параметр будет использован только когда acme_version равен 1. | |
| chain_dest (добавлено в 2.5) | Если указано, промежуточный сертификат будет записан в этот файл. Псевдонимы: chain | |
| challenge |
| Выполняемый вызов. |
| csr обязательно | Файл, содержащий CSR для нового сертификата. Можно создать с помощью openssl req ....CSR может содержать несколько альтернативных имён субъекта, но каждое из них приведёт к отдельному вызову, который необходимо выполнить для подписания CSR.
Примечание: закрытый ключ, используемый для создания CSR, не должен быть ключом аккаунта. Это плохая идея с точки зрения безопасности, и CA не должна принимать CSR. Let's Encrypt вернёт ошибку в этом случае. Псевдонимы: src | |
| data | Данные для проверки текущих вызовов. Это необходимо только для второго запуска модуля. Значение, которое нужно использовать здесь, будет предоставлено предыдущим использованием этого модуля. См. примеры для получения дополнительной информации.
Примечание: параметр data был помечен как no_log до Ansible 2.5. Начиная с Ansible 2.6, он больше не помечен таким образом, так как это делает сообщения об ошибках нечитабельными, а data не содержит информации, которая может быть использована без доступа к закрытому ключу аккаунта или которая не является общедоступной. | |
| deactivate_authzs bool (добавлено в 2.6) |
| Отключить объекты аутентификации (authz) после выдачи сертификата или при неудачной выдаче сертификата. Объекты аутентификации привязаны к ключу аккаунта и остаются действительными в течение определённого времени и могут использоваться для выдачи сертификатов без повторной аутентификации домена. Это может быть проблемой с точки зрения безопасности. |
| dest | Файл назначения для сертификата. Требуется, если fullchain_dest не указан.Псевдонимы: cert | |
| force bool (добавлено в 2.6) |
| Принудительно выполняет проверку вызова и валидацию, даже если существующий сертификат всё ещё действителен. Это особенно полезно при обновлении CSR, например, с дополнительными доменами, для которых требуется новый сертификат. |
| fullchain_dest (добавлено в 2.5) | Файл назначения для полного цепочки (т.е. сертификата, после которого следует цепочка промежуточных сертификатов). Требуется, если dest не указан.Псевдонимы: fullchain | |
| modify_account bool (добавлено в 2.6) |
| Булево значение, указывающее, должен ли модуль создавать аккаунт при необходимости и обновлять данные контакта. Установите значение no, если вы хотите использовать acme_account, чтобы управлять вашим аккаунтом, и избежать случайного создания нового аккаунта с использованием старого ключа, если вы изменили ключ аккаунта с помощью acme_account.Если установлено значение no, terms_agreed и account_email игнорируются. |
| remaining_days | По умолчанию: 10 | Количество оставшихся дней действия сертификата. Если cert_days < remaining_days, то он будет продлён. Если сертификат не продлён, значения модуля не будут включать challenge_data. |
| terms_agreed bool (добавлено в 2.5) |
| Булево значение, указывающее, согласны ли вы с условиями обслуживания. Серверы ACME могут потребовать этого. Этот параметр будет использован только если acme_version не равно 1. |
| validate_certs bool (добавлено в 2.5) |
| Определяет, будут ли валидироваться TLS-сертификаты при вызовах в каталог ACME.
Предупреждение: Должен всегда устанавливаться в no только для целей тестирования, например, при тестировании на локальном сервере Pebble. |
Примеры
### Example with HTTP challenge ###
- name: Create a challenge for sample.com using a account key from a variable.
acme_certificate:
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.
acme_certificate:
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.
acme_certificate:
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
acme_certificate:
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.
acme_certificate:
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
acme_certificate:
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 строка (добавлено в 2.5) | изменённое | URI учётной записи ACME. | |
| authorizations сложное | изменённое | Данные авторизации ACME. | |
| authorization словарь | успешно | Объект авторизации ACME. См. https://tools.ietf.org/html/draft-ietf-acme-acme-12#section-7.1.4
| |
| cert_days целое число | успешно | количество дней, в течение которых сертификат действителен. | |
| challenge_data сложное | изменённое | данные о вызове для домена/типа вызова | |
| resource строка | изменённое | ресурс вызова, который должен быть создан для проверки Пример: .well-known/acme-challenge/evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA | |
| resource_value строка | изменённое | значение, которое должен выдать ресурс для проверки Пример: IlirfxKKXA...17Dt3juxGJ-PCt92wr-oA | |
| record строка (добавлено в 2.5) | изменённое и вызов dns-01
| Полное имя записи DNS для вызова Пример: _acme-challenge.example.com | |
| challenge_data_dns словарь (добавлено в 2.5) | изменённое | список значений TXT для каждой записи DNS, в случае вызова dns-01
| |
| finalization_uri строка (добавлено в 2.5) | изменённое | URI завершения ACME. | |
| order_uri строка (добавлено в 2.5) | изменённое | URI заказа ACME. | |
Статус
Этот модуль помечен как превью, что означает, что его интерфейс не гарантируется как обратная совместимость.
Техническое обслуживание
Этот модуль помечен как сообщество, что означает, что он поддерживается сообществом Ansible. См. Поддержка и техническое обслуживание модулей для получения дополнительной информации.
Список других модулей, поддерживаемых сообществом Ansible, см. в здесь.
Автор
- Михаил Грунер (@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.6/modules/acme_certificate_module.html