Spec-Zone.ru › Ansible 2.8

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

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

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

Обзор

  • Создайте и обновите сертификаты 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-адресов в соответствии с текущим черновиком ACME IP.

Псевдонимы: 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.
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. Использование не изменилось.
  • Если доступна новая версия библиотеки cryptography (см. Требования для подробностей), она будет использоваться вместо openssl бинарника. Это можно явно отключить или включить с помощью параметра select_crypto_backend. Обратите внимание, что использование openssl бинарника будет медленнее и менее безопаснее, так как содержимое закрытого ключа всегда должно храниться на диске (см. account_key_content).
  • Хотя значения по умолчанию выбраны таким образом, чтобы модуль можно было использовать с CA Let’s Encrypt, модуль в принципе может использоваться с любой CA, предоставляющей конечную точку ACME, например, Buypass Go SSL.

См. также

См. также

Документация Let’s Encrypt
Документация для Let’s Encrypt Certification Authority. Предоставляет полезную информацию, например, о ограничениях на частоту запросов.
Buypass Go SSL
Документация для Buypass Certification Authority. Предоставляет полезную информацию, например, о ограничениях на частоту запросов.
Automatic Certificate Management Environment (ACME)
Спецификация протокола ACME (RFC 8555).
ACME TLS ALPN Challenge Extension
Текущая черновая спецификация расширения вызова tls-alpn-01 challenge.
acme_challenge_cert_helper — Подготовка сертификатов, необходимых для вызовов ACME, таких как tls-alpn-01
Помогает подготовить вызовы tls-alpn-01 challenges.
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.

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_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://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.



Состояние

  • Этот модуль не гарантирует обратную совместимость интерфейса. [preview]
  • Этот модуль поддерживается сообществом 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.8/modules/acme_certificate_module.html

Spec-Zone.ru

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