Spec-Zone.ru › Ansible 2.5

letsencrypt - Создание SSL-сертификатов с помощью Let’s Encrypt

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

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

Обзор

  • Создание и обновление SSL-сертификатов с помощью Let’s Encrypt. Let’s Encrypt — это бесплатный, автоматизированный и открытый центр сертификации (CA), работающий на благо общественности. Подробнее см. https://letsencrypt.org. Текущая реализация поддерживает вызовы http-01, tls-sni-02 и dns-01.
  • Для использования этого модуля необходимо выполнить его дважды. Либо как две разные задачи в одном запуске, либо во время двух запусков. Обратите внимание, что вывод первого запуска необходимо записать и передать во второй запуск в качестве аргумента модуля data.
  • Между этими двумя задачами необходимо выполнить необходимые шаги для выбранного вызова любым доступным способом. Для http-01 это означает создание необходимого файла вызова на целевом веб-сервере. Для dns-01 необходимо создать необходимый DNS-запись. tls-sni-02 требует создания SSL-сертификата с соответствующими SubjectAlternativeNames. Данный модуль *не* несет ответственности за выполнение этих шагов.
  • Подробную информацию о выполнении этих вызовов можно найти в https://tools.ietf.org/html/draft-ietf-acme-acme-09#section-8. Также обратите внимание на примеры, предоставленные для этого модуля.
  • Хотя значения по умолчанию выбраны таким образом, чтобы модуль мог использоваться с центром сертификации Let’s Encrypt, его можно использовать с любым сервисом, использующим протокол ACME v1 или v2. Предупреждение: Поддержка ACME v2 в настоящее время находится на стадии эксперимента, так как производственный конечный пункт ACME v2 Let’s Encrypt все еще находится в стадии разработки.
  • Должен быть указан как минимум один из dest и fullchain_dest.

Требования

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

  • python >= 2.6
  • openssl

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
account_email
Адрес электронной почты, связанный с этой учетной записью.
Будет использоваться для предупреждений о истечении срока действия сертификата.
account_key_content
(добавлено в 2.5)
Содержание RSA или Elliptic Curve ключа учетной записи Let's Encrypt.
Взаимоисключающие с account_key_src.
Требуется, если account_key_src не используется.
Предупреждение: содержимое будет записано во временный файл, который будет удален Ansible при завершении модуля. Поскольку это важный закрытый ключ — он может использоваться для изменения ключа учетной записи или для аннулирования сертификатов без знания их закрытых ключей —, это может быть неприемлемо.
account_key_src
Путь к файлу, содержащему RSA или Elliptic Curve ключ учетной записи Let's Encrypt.
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. Это создаст технически корректные, но недоверенные сертификаты.
Вы можете найти URL-адреса тестовых конечных точек здесь: https://letsencrypt.org/docs/staging-environment/
Производственный URL-адрес каталога ACME v1 Let's Encrypt, который создает надлежащие доверенные сертификаты, составляет https://acme-v01.api.letsencrypt.org/directory.
acme_version
(добавлено в 2.5)
    Варианты:
  • 1
  • 2
Версия ACME конечной точки.
Должно быть 1 для классической конечной точки ACME Let's Encrypt или 2 для новой конечной точки ACME v2.
Предупреждение: Поддержка ACME v2 в настоящее время находится на стадии эксперимента, так как производственный конечный пункт ACME v2 Let’s Encrypt все еще находится в стадии разработки. Код протестирован на последней тестовой точке, а также на тестовом сервере Pebble, но могут быть ошибки, которые проявятся только с более новой версией этих или с производственной конечной точкой ACME v2.
agreement
URI документа об условиях обслуживания, с которыми вы соглашаетесь при использовании сервиса ACME v1 по адресу acme_directory.
По умолчанию используется последнее значение, полученное из URL-адреса acme_directory.
Этот параметр будет использоваться только при acme_version равно 1.
chain_dest
(добавлено в 2.5)
По умолчанию:
None
Если указано, промежуточный сертификат будет записан в этот файл.

Псевдонимы: chain
challenge
    Варианты:
  • http-01 ←
  • dns-01
  • tls-sni-02
Выполняемый вызов.
csr
обязательно
Файл, содержащий CSR для нового сертификата.
Можно создать с помощью openssl req ....
CSR может содержать несколько Subject Alternate Names, но каждый из них приведет к отдельному вызову, который необходимо выполнить для подписания CSR.
Примечание: закрытый ключ, используемый для создания CSR, *не должен* быть ключом учетной записи. Это плохая идея с точки зрения безопасности, и Let's Encrypt не примет CSR.

Псевдонимы: src
data
Данные для проверки текущих вызовов. Это необходимо указать только для второго запуска модуля.
Значение, которое необходимо использовать здесь, будет предоставлено предыдущим использованием данного модуля. Дополнительные сведения см. в примерах.
dest
Целевой файл для сертификата.
Требуется, если fullchain_dest не указан.

Псевдонимы: cert
fullchain_dest
(добавлено в 2.5)
Целевой файл для полного набора цепочек (т.е. сертификата, за которым следуют промежуточные сертификаты).
Требуется, если dest не указан.

Псевдонимы: fullchain
remaining_days По умолчанию:
10
Количество дней, оставшихся до истечения срока действия сертификата. Если cert_days < remaining_days, он будет обновлен. Если сертификат не обновлен, значения возврата модуля не будут включать challenge_data.
terms_agreed
(добавлено в 2.5)
По умолчанию:
no
Логическое значение, указывающее, согласны ли вы с условиями обслуживания.
Серверы ACME могут потребовать, чтобы это значение было true.
Этот параметр будет использоваться только при acme_version не равно 1.
validate_certs
(добавлено в 2.5)
По умолчанию:
yes
Указывает, будут ли проверены сертификаты TLS при вызовах в каталог ACME.
Предупреждение: Должен только устанавливаться в false в тестовых целях, например, при тестировании на локальном сервере Pebble.

Примеры

### Example with HTTP challenge ###

- name: Create a challenge for sample.com using a account key from a variable.
  letsencrypt:
    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.
  letsencrypt:
    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.
  letsencrypt:
    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
  letsencrypt:
    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.
  letsencrypt:
    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
  letsencrypt:
    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
строка
изменённое
URI учётной записи ACME.

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

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

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

challenge_data
сложное
изменённое
Данные вызова для каждого домена/типа вызова.

resource
строка
изменённое
Ресурс вызова, который должен быть создан для валидации.

Пример:
.well-known/acme-challenge/evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA
resource_value
строка
изменённое
Значение, которое ресурс должен выдать для валидации.

Пример:
IlirfxKKXA...17Dt3juxGJ-PCt92wr-oA
record
строка
изменённое и вызов dns-01
Полное имя записи DNS для вызова.

Пример:
_acme-challenge.example.com
challenge_data_dns
словарь
изменённое
Список значений TXT для каждой записи DNS, если вызов dns-01.

finalization_uri
строка
изменённое
URI завершения ACME.

order_uri
строка
изменённое
URI заказа ACME.



Статус

Этот модуль помечен как превью, что означает, что его интерфейс не гарантируется обратной совместимостью.

Автор

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

Spec-Zone.ru

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