Spec-Zone.ru › Ansible 2.7

acme_certificate – Создание сертификатов SSL/TLS с протоколом ACME

Новое в версии 2.2.

  • Обзор
  • Требования
  • Параметры
  • Примечания
  • Примеры
  • Возвращаемые значения
  • Статус

Обзор

  • Создание и продление сертификатов SSL/TLS с CA, поддерживающей протокол ACME, например, Let’s Encrypt. Текущая реализация поддерживает вызовы http-01, dns-01 и tls-alpn-01.
  • Для использования данного модуля требуется его выполнение дважды. Либо в качестве двух разных задач в одном запуске, либо в двух разных запусках. Обратите внимание, что результат первого запуска необходимо сохранить и передать во второй запуск в качестве аргумента модуля data.
  • Между этими двумя задачами необходимо выполнить необходимые шаги для выбранного способа проверки, любым необходимым способом. Для http-01 это означает создание необходимого файла проверки на целевом веб-сервере. Для dns-01 необходимо создать необходимый DNS-запись. Для tls-alpn-01 необходимо создать и предоставить необходимый сертификат. Данный модуль не отвечает за выполнение этих шагов.
  • Для получения подробной информации о выполнении этих проверок, возможно, придётся ознакомиться с основной спецификацией ACME и спецификацией TLS-ALPN-01. Также рассмотрите примеры, предоставленные для данного модуля.

Псевдонимы: letsencrypt

Требования

Ниже приведены требования, необходимые на хосте, на котором выполняется этот модуль.

  • python >= 2.6
  • либо openssl, …
  • … или cryptography >= 1.5

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
account_email
-
Электронный адрес, связанный с этим аккаунтом.
Будет использоваться для предупреждений о сроке действия сертификата.
Обратите внимание, что когда modify_account не установлено в no, и вы также использовали модуль acme_account для указания более одного контакта для вашего аккаунта, этот модуль обновит ваш аккаунт и ограничит его (максимум одним) электронным адресом контакта, указанным здесь.
account_key_content
-
добавлен в 2.5
Содержимое ключа RSA или ключа эллиптической кривой аккаунта ACME.
Взаимоисключающее с account_key_src.
Требуется, если account_key_src не используется.
Предупреждение: содержимое будет записано во временный файл, который будет удален Ansible по завершении модуля. Поскольку это важный закрытый ключ — он может быть использован для изменения ключа аккаунта или для отзыва ваших сертификатов, не зная их закрытых ключей —, это может быть неприемлемо.
В случае использования cryptography, содержимое не записывается во временный файл. Однако, всё равно может произойти запись на диск Ansible в процессе перемещения модуля с его аргументами на узел, где он выполняется.
account_key_src
-
Путь к файлу, содержащему ключ RSA или ключ эллиптической кривой аккаунта ACME.
Ключи RSA могут быть созданы с помощью openssl genrsa .... Ключи эллиптической кривой могут быть созданы с помощью openssl ecparam -genkey .... Также могут быть использованы любые другие инструменты, создающие закрытые ключи в формате PEM.
Взаимоисключающее с account_key_content.
Требуется, если account_key_content не используется.

псевдонимы: account_key
account_uri
-
добавлен в 2.7
Если указано, предполагается, что URI аккаунта задан как указано. Если ключ аккаунта не соответствует этому аккаунту или аккаунт с этим URI не существует, модуль завершается ошибкой.
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.
acme_version
-
добавлен в 2.5
    Варианты:
  • 1 ←
  • 2
Версия 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
-
    Варианты:
  • http-01 ←
  • dns-01
  • tls-alpn-01
Выполняемый вызов.
csr
- / обязательно
Файл, содержащий CSR для нового сертификата.
Можно создать с помощью openssl req ....
CSR может содержать несколько альтернативных имен субъекта, но каждое из них приведет к отдельному вызову, который необходимо выполнить для подписания CSR.
Примечание: закрытый ключ, используемый для создания CSR, не должен быть ключом аккаунта. Это плохая идея с точки зрения безопасности, и CA не должна принимать CSR. Сервер ACME должен возвращать ошибку в этом случае.

псевдонимы: src
data
-
Данные для проверки текущих вызовов. Это необходимо указать только при повторном запуске модуля.
Значение, которое нужно использовать здесь, будет предоставлено предыдущим использованием этого модуля. См. примеры для получения более подробной информации.
Обратите внимание, что для ACME v2 будет использоваться только запись order_uri из data. Для ACME v1 data должно быть непустым, чтобы указать, что второй этап активен; все необходимые данные будут взяты из CSR.
Примечание: параметр data был помечен как no_log до Ansible 2.5. Начиная с Ansible 2.6, он больше не помечен таким образом, так как это делает сообщения об ошибках нечитабельными, и data не содержит никакой информации, которая могла бы быть использована без доступа к ключу аккаунта или которая не является публичной.
deactivate_authzs
boolean
добавлен в 2.6
    Варианты:
  • нет ←
  • да
Деактивировать объекты аутентификации (authz) после выдачи сертификата или при ошибке выдачи сертификата.
Объекты аутентификации связаны с ключом аккаунта и остаются действительными в течение определенного времени и могут быть использованы для выдачи сертификатов без повторной аутентификации домена. Это может быть проблемой с точки зрения безопасности.
dest
-
Файл назначения для сертификата.
Требуется, если fullchain_dest не указан.

псевдонимы: cert
force
boolean
добавлен в 2.6
    Варианты:
  • нет ←
  • да
Принудительно выполняет проверку вызова и валидации, даже если существующий сертификат по-прежнему действителен более чем на remaining_days.
Это особенно полезно при наличии обновлённого CSR, например, с дополнительными доменами, для которых требуется новый сертификат.
fullchain_dest
-
добавлен в 2.5
Файл назначения для полного цепочки (т.е. сертификата, после которого следует цепочка промежуточных сертификатов).
Требуется, если dest не указан.

псевдонимы: fullchain
modify_account
boolean
добавлен в 2.6
    Варианты:
  • нет
  • да ←
Булево значение, указывающее, должен ли модуль создавать аккаунт при необходимости и обновлять его контактные данные.
Установите no если вы хотите использовать модуль acme_account для управления вашим аккаунтом вместо этого и для предотвращения случайного создания нового аккаунта с использованием старого ключа, если вы изменили ключ аккаунта с помощью модуля acme_account.
Если установлено no, terms_agreed и account_email игнорируются.
remaining_days
-
Значение по умолчанию:
10
Количество оставшихся дней действия сертификата. Если cert_days < remaining_days, то он будет продлен. Если сертификат не продлен, значения модуля не будут включать challenge_data.
Чтобы убедиться, что сертификат будет продлен в любом случае, вы можете использовать параметр force.
select_crypto_backend
строка
добавлен в 2.7
    Варианты:
  • auto ←
  • cryptography
  • openssl
Определяет, какой криптографический бэкенд использовать. По умолчанию используется auto, который пытается использовать cryptography при его наличии, в противном случае использует openssl.
Если установлено значение openssl, будет попытка использовать openssl бинарник.
Если установлено значение cryptography, будет попытка использовать библиотеку cryptography.
terms_agreed
булево
добавлен в 2.5
    Варианты:
  • no ←
  • yes
Булево значение, указывающее, согласны ли вы с условиями обслуживания.
Серверы ACME могут потребовать, чтобы это значение было true.
Этот параметр будет использоваться только в случае, если acme_version не равно 1.
validate_certs
булево
добавлен в 2.5
    Варианты:
  • no
  • yes ←
Определяет, будут ли проверяться сертификаты TLS при обращении к каталогу ACME.
Предупреждение: Данный параметр должен всегда устанавливаться в no только для целей тестирования, например, при тестировании с локальным сервером Pebble.

Примечания

Примечание

  • По крайней мере, один из dest и fullchain_dest должен быть указан.
  • Этот модуль включает базовые функции управления учетной записью. Если вы хотите иметь больший контроль над своей учетной записью ACME, используйте модуль acme_account и отключите управление учетной записью для данного модуля, используя параметр modify_account.
  • Этот модуль назывался letsencrypt до Ansible 2.6. Способ использования не изменился.
  • Если вы хотите использовать вызов tls-alpn-01, вы можете использовать модуль acme_challenge_cert_helper для подготовки сертификата вызова.
  • Вы можете использовать модуль certificate_complete_chain для поиска корневого сертификата для возвращаемой полной цепочки.
  • Если доступна новая достаточно версия библиотеки cryptography (см. Требования для подробностей), она будет использоваться вместо бинарника openssl. Это можно явно отключить или включить с помощью параметра select_crypto_backend. Обратите внимание, что использование бинарника openssl будет медленнее и менее безопаснее, так как содержимое закрытого ключа всегда должно храниться на диске (см. account_key_content).
  • Хотя значения по умолчанию выбраны таким образом, чтобы модуль можно было использовать с центром сертификации Let’s Encrypt, модуль в принципе может использоваться с любым центром сертификации, предоставляющим конечную точку ACME.

Примеры

### 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
#     state: present
#     wait: yes
#     # Note: route53 requires TXT entries to be enclosed in quotes
#     value: "{{ sample_com_challenge.challenge_data['sample.com']['dns-01'].resource_value | regex_replace('^(.*)$', '\"\\1\"') }}"
#   when: sample_com_challenge is changed
#
# Alternative way:
#
# - route53:
#     zone: sample.com
#     record: "{{ item.key }}"
#     type: TXT
#     ttl: 60
#     state: present
#     wait: yes
#     # 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 }}"
  when: sample_com_challenge is changed

Возвращаемые значения

Общие возвращаемые значения описаны здесь, следующие поля уникальны для данного модуля:

Ключ Возвращаемое значение Описание
account_uri
строка
добавлен в 2.5
изменено
URI учетной записи ACME.

authorizations
сложная структура
изменено
Данные авторизации ACME.

authorization
словарь
успех
Объект авторизации ACME. См. https://tools.ietf.org/html/rfc8555#section-7.1.4

cert_days
целое число
успех
количество дней, в течение которых действителен сертификат.

challenge_data
сложная структура
изменено
данные вызова по домену/типу вызова

record
строка
добавлен в 2.5
изменено и вызов dns-01
полное имя DNS-записи для вызова

Пример:
_acme-challenge.example.com
resource
строка
изменено
ресурс вызова, который должен быть создан для проверки

Пример:
.well-known/acme-challenge/evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA
resource_value
строка
изменено
Значение, которое должен генерировать ресурс для проверки.
Для вызовов http-01 и dns-01 значение можно использовать непосредственно.
Для вызовов tls-alpn-01 обратите внимание, что это возвращаемое значение содержит кодированную в Base64 версию правильного бинарного блока, который должен быть помещён в расширение acmeValidation x509; см. https://tools.ietf.org/html/draft-ietf-acme-tls-alpn-05#section-3 для подробностей. Для этого может потребоваться фильтр Jinja b64decode для извлечения бинарного блока из этого возвращаемого значения.

Пример:
IlirfxKKXA...17Dt3juxGJ-PCt92wr-oA
challenge_data_dns
словарь
добавлен в 2.5
изменено
список TXT-значений по DNS-записям в случае вызова dns-01

finalization_uri
строка
добавлен в 2.5
изменено
URI завершения ACME.

order_uri
строка
добавлен в 2.5
изменено
URI заказа ACME.



Статус

  • Интерфейс этого модуля не гарантируется обратной совместимостью. [превью]
  • Этот модуль поддерживается сообществом Ansible. [сообщество]

Авторы

  • 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.7/modules/acme_certificate_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API