Spec-Zone.ru › Ansible 2.6

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)
    Варианты:
  • 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
Выполняемый вызов.
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

Spec-Zone.ru

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