Spec-Zone.ru › Ansible 2.9

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

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

Описание

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

Псевдонимы: 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 staging (для протокола ACME v1). Это создаст технически корректные, но недоверенные сертификаты.
Для Let's Encrypt все адреса staging можно найти здесь: https://letsencrypt.org/docs/staging-environment/. Для Buypass все адреса можно найти здесь: https://community.buypass.com/t/63d4ay/buypass-go-ssl-endpoints
Для Let's Encrypt URL каталога production для ACME v1 — https://acme-v01.api.letsencrypt.org/directory, а для ACME v2 — https://acme-v02.api.letsencrypt.org/directory.
Для Buypass URL каталога production для ACME v2 и v1 — https://api.buypass.com/acme/directory.
Предупреждение: До сих пор модуль тестировался только с Let's Encrypt (staging и production), Buypass (staging и production) и Pebble testing server.
acme_version
целое число
добавлено в 2.5
    Варианты:
  • 1 ←
  • 2
Версия ACME конечной точки.
Должно быть 1 для классических Let's Encrypt и Buypass ACME конечных точек или 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
булево
добавлено в 2.6
    Варианты:
  • нет ←
  • да
Деактивировать объекты аутентификации (authz) после выпуска сертификата или при неудачном выпуске сертификата.
Объекты аутентификации привязаны к ключу аккаунта и остаются действительными в течение определенного периода времени и могут быть использованы для выдачи сертификатов без необходимости повторной аутентификации домена. Это может представлять угрозу безопасности.
dest
путь
Файл назначения для сертификата.
Обязательно, если fullchain_dest не указан.

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

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

Примечания

Примечание

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

См. также

См. также

Документация Let’s Encrypt
Документация центра сертификации Let’s Encrypt. Предоставляет полезную информацию, например, о ограничениях по количеству запросов.
Buypass Go SSL
Документация центра сертификации Buypass. Предоставляет полезную информацию, например, о ограничениях по количеству запросов.
Автоматическое управление сертификатами (ACME)
Спецификация протокола ACME (RFC 8555).
Расширение ACME TLS ALPN Challenge
Спецификация расширения вызова tls-alpn-01 (RFC 8737).
acme_challenge_cert_helper — Подготовка сертификатов, необходимых для вызовов ACME, таких как tls-alpn-01
Помогает в подготовке вызовов tls-alpn-01.
openssl_privatekey — Генерация закрытых ключей OpenSSL
Может использоваться для создания закрытых ключей (как для сертификатов, так и для учетных записей).
openssl_csr — Генерация запроса на подпись сертификата (CSR) OpenSSL
Может использоваться для создания запроса на подпись сертификата (CSR).
certificate_complete_chain — Полная цепочка сертификатов, заданная набором недоверенных и корневых сертификатов
Позволяет найти корневой сертификат для возвращенной полной цепочки.
acme_certificate_revoke — Отмена сертификатов с помощью протокола ACME
Позволяет отменять сертификаты.
acme_account — Создание, изменение или удаление учетных записей ACME
Позволяет создавать, изменять или удалять учетную запись ACME.
acme_inspect — Отправка прямых запросов на сервер 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 and 'sample.com' in sample_com_challenge['challenge_data']
#
# Alternative way:
#
# - copy:
#     dest: /var/www/{{ item.key }}/{{ item.value['http-01']['resource'] }}
#     content: "{{ item.value['http-01']['resource_value'] }}"
#   loop: "{{ sample_com_challenge.challenge_data | dictsort }}"
#   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 and 'sample.com' in sample_com_challenge.challenge_data
#
# 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 }}"
#   loop: "{{ sample_com_challenge.challenge_data_dns | dictsort }}"
#   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.

all_chains
список / элементы=словарь
при получении сертификата и при retrieve_all_alternates равно yes
Если retrieve_all_alternates установлено в значение yes, модуль запросит у сервера ACME альтернативные цепочки сертификатов. Это возвращаемое значение будет содержать список всех полученных цепочек, первой из которых будет основная цепочка, возвращенная сервером.
Подробности см. в разделе 7.4.2 RFC8555.

cert
строка
всегда
Сам лист сертификата в формате PEM.

chain
строка
всегда
Цепочка сертификатов, исключая корневой, как конкатенированные PEM-сертификаты.

full_chain
строка
всегда
Цепочка сертификатов, исключая корневой, но включая лист сертификата, как конкатенированные PEM-сертификаты.

authorizations
словарь
изменено
Данные авторизации ACME.
Сопоставляет идентификатор с объектами авторизации ACME. См. https://tools.ietf.org/html/rfc8555#section-7.1.4.

Пример:
{"example.com":{...}}
cert_days
целое число
успешно
Количество дней, в течение которых сертификат остается действительным.

challenge_data
список / элементы=словарь
изменено
Данные вызова по идентификатору/типу вызова.
Начиная с Ansible 2.8.5, возвращаются только вызовы, которые еще не действительны.

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

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

Пример:
.well-known/acme-challenge/evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA
resource_original
строка
добавлено в 2.8
изменено и вызов tls-alpn-01
Оригинальный ресурс вызова, включая идентификатор типа для tls-alpn-01 вызовов.

Пример:
DNS:example.com
resource_value
строка
изменено
Значение, которое должен произвести ресурс для валидации.
Для http-01 и dns-01 вызовов значение можно использовать напрямую.
Для tls-alpn-01 вызовов обратите внимание, что это возвращаемое значение содержит Base64-кодированную версию правильного двоичного блока, который необходимо поместить в расширение acmeValidation x509; см. https://www.rfc-editor.org/rfc/rfc8737.html#section-3 для подробностей. Для этого вам может понадобиться b64decode фильтр Jinja для извлечения двоичного блока из этого возвращаемого значения.

Пример:
IlirfxKKXA...17Dt3juxGJ-PCt92wr-oA
challenge_data_dns
словарь
добавлено в 2.5
изменено
Список TXT-значений по DNS-записи, если вызов dns-01.
Начиная с Ansible 2.8.5, возвращаются только вызовы, которые еще не действительны.

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

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



Статус

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

Авторы

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

Spec-Zone.ru

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