Spec-Zone.ru › Ansible 2.10

community.crypto.acme_inspect – Отправка прямых запросов к серверу ACME

Примечание

Этот плагин входит в состав коллекции community.crypto (версия 1.3.0).

Для его установки используйте: ansible-galaxy collection install community.crypto.

Чтобы использовать его в книге задач, укажите: community.crypto.acme_inspect.

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

Обзор

  • Позволяет отправлять прямые запросы к серверу ACME с использованием протокола ACME, который поддерживается такими центрами сертификации, как Let’s Encrypt.
  • Этот модуль можно использовать для отладки неудачных попыток запроса сертификата, например, когда модуль community.crypto.acme_certificate завершается ошибкой или сталкивается с проблемой, которую вы хотите исследовать.
  • Модуль также можно использовать для прямого доступа к функциям серверов ACME, которые еще не поддерживаются модулями Ansible ACME.

Требования

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

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

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
account_key_content
строка
Содержимое ключа учетной записи ACME RSA или эллиптической кривой.
Взаимоисключающий с account_key_src.
Требуется, если account_key_src не используется.
*Предупреждение:* содержимое будет записано во временный файл, который Ansible удалит по завершении модуля. Поскольку это важный закрытый ключ — он может использоваться для изменения ключа учетной записи или для аннулирования сертификатов без знания их закрытых ключей —, это может быть неприемлемо.
В случае использования cryptography, содержимое не записывается во временный файл. Тем не менее, Ansible может записать его на диск во время передачи модуля и его аргументов на узел, на котором он выполняется.
account_key_src
путь
Путь к файлу, содержащему закрытый ключ учетной записи ACME RSA или эллиптической кривой.
Закрытые ключи можно создать с помощью модуля community.crypto.openssl_privatekey. Если требуемые библиотеки (pyOpenSSL или cryptography) недоступны, ключи также можно создать напрямую с помощью openssl командной утилиты: ключи RSA можно создать с помощью openssl genrsa ..., а ключи эллиптических кривых — с помощью openssl ecparam -genkey .... Также можно использовать любой другой инструмент, создающий закрытые ключи в формате PEM.
Взаимоисключающий с account_key_content.
Требуется, если account_key_content не используется.

Псевдонимы: account_key
account_uri
строка
Если указано, предполагается, что URI учетной записи задано как указано. Если ключ учетной записи не соответствует этой учетной записи или учетная запись с этим URI не существует, модуль завершится ошибкой.
acme_directory
строка
Используемый каталог ACME. Это URL-адрес начальной точки для доступа к API сервера CA.
В целях безопасности по умолчанию используется тестовый сервер Let's Encrypt (для протокола ACME v1). Это создаст технически правильные, но недоверенные сертификаты.
Значение по умолчанию — https://acme-staging.api.letsencrypt.org/directory. Обратите внимание, что в версии community.crypto 2.0.0 этот параметр *будет обязательным* и больше не будет иметь значения по умолчанию.
Все тестовые конечные точки Let's Encrypt можно найти здесь: https://letsencrypt.org/docs/staging-environment/. Все конечные точки Buypass можно найти здесь: https://community.buypass.com/t/63d4ay/buypass-go-ssl-endpoints
Для Let's Encrypt URL каталога производства для ACME v1 — https://acme-v01.api.letsencrypt.org/directory, а URL каталога производства для ACME v2 — https://acme-v02.api.letsencrypt.org/directory.
Для Buypass URL каталога производства для ACME v2 и v1 — https://api.buypass.com/acme/directory.
*Предупреждение:* Модуль пока тестировался только с Let's Encrypt (тестовым и производственным), Buypass (тестовым и производственным) и тестовым сервером Pebble.
acme_version
целое число
    Варианты:
  • 1
  • 2
Версия ACME конечной точки.
Должно быть 1 для классических конечных точек ACME Let's Encrypt и Buypass или 2 для стандартных конечных точек ACME v2.
Значение по умолчанию — 1. Обратите внимание, что в версии community.crypto 2.0.0 этот параметр *будет обязательным* и больше не будет иметь значения по умолчанию.
Пожалуйста, также обратите внимание, что мы в конечном итоге прекратим поддержку ACME v1.
content
строка
Кодированный JSON-объект, который будет отправлен в качестве содержимого, если method — post.
Требуется, когда method — post, и недопустимо в других случаях.
fail_on_acme_error
логическое значение
    Варианты:
  • no
  • да ←
Если method — post или get, модуль завершится ошибкой, если будет возвращена ошибка ACME.
method
строка
    Варианты:
  • get ←
  • post
  • directory-only
Метод доступа к заданному URL на сервере ACME.
Значение post выполняет аутентифицированный POST-запрос. Содержимое должно быть указано в параметре content.
Значение get выполняет аутентифицированный POST-как-GET запрос для ACME v2 и обычный GET-запрос для ACME v1.
Значение directory-only получает только каталог без выполнения запроса.
select_crypto_backend
строка
    Варианты:
  • auto ←
  • cryptography
  • openssl
Определяет, какой криптографический бэкенд использовать.
Значение по умолчанию — auto, которое пытается использовать cryptography если доступно, и в противном случае переходит к openssl.
Если задано openssl, попытается использовать openssl двоичный файл.
Если задано cryptography, попытается использовать библиотеку cryptography.
url
строка
URL-адрес для отправки запроса.
Должен быть указан, если method не directory-only.
validate_certs
логическое значение
    Варианты:
  • no
  • да ←
Указывает, будут ли валидироваться сертификаты TLS при вызовах каталога ACME.
*Предупреждение:* Должно *только* устанавливаться в no для целей тестирования, например, при тестировании на локальном сервере Pebble.

Примечания

Примечание

  • Параметр account_uri должен быть указан для надлежащей аутентификации запросов ACME v2 (кроме запроса new-account).
  • Используя инструмент ansible , модуль community.crypto.acme_inspect может использоваться для непосредственного выполнения запросов ACME без необходимости написания книги задач. Например, следующий команд выполняет получение учетной записи ACME с идентификатором 1 из Let’s Encrypt (предполагая, что /path/to/key — это корректный закрытый ключ учетной записи): ansible localhost -m acme_inspect -a "account_key_src=/path/to/key acme_directory=https://acme-v02.api.letsencrypt.org/directory acme_version=2 account_uri=https://acme-v02.api.letsencrypt.org/acme/acct/1 method=get url=https://acme-v02.api.letsencrypt.org/acme/acct/1"
  • Если доступна достаточно новая версия библиотеки cryptography, она будет использоваться вместо двоичного файла openssl. Это можно явно отключить или включить с помощью параметра select_crypto_backend. Обратите внимание, что использование двоичного файла openssl будет медленнее и менее безопасным, так как содержимое закрытых ключей всегда должно храниться на диске (см. account_key_content).
  • Несмотря на то, что значения по умолчанию выбраны таким образом, чтобы модуль можно было использовать с центром сертификации Let’s Encrypt, в принципе модуль может быть использован с любым центром сертификации, предоставляющим конечную точку ACME, таким как Buypass Go SSL.

См. также

См. также

Автоматическое управление сертификатами (ACME)

Спецификация протокола ACME (RFC 8555).

Расширение ACME TLS ALPN Challenge

Спецификация расширения вызова tls-alpn-01 (RFC 8737).

Примеры

- name: Get directory
  community.crypto.acme_inspect:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    method: directory-only
  register: directory

- name: Create an account
  community.crypto.acme_inspect:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    account_key_src: /etc/pki/cert/private/account.key
    url: "{{ directory.newAccount}}"
    method: post
    content: '{"termsOfServiceAgreed":true}'
  register: account_creation
  # account_creation.headers.location contains the account URI
  # if creation was successful

- name: Get account information
  community.crypto.acme_inspect:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    account_key_src: /etc/pki/cert/private/account.key
    account_uri: "{{ account_creation.headers.location }}"
    url: "{{ account_creation.headers.location }}"
    method: get

- name: Update account contacts
  community.crypto.acme_inspect:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    account_key_src: /etc/pki/cert/private/account.key
    account_uri: "{{ account_creation.headers.location }}"
    url: "{{ account_creation.headers.location }}"
    method: post
    content: '{{ account_info | to_json }}'
  vars:
    account_info:
      # For valid values, see
      # https://tools.ietf.org/html/rfc8555#section-7.3
      contact:
      - mailto:me@example.com

- name: Create certificate order
  community.crypto.acme_certificate:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    account_key_src: /etc/pki/cert/private/account.key
    account_uri: "{{ account_creation.headers.location }}"
    csr: /etc/pki/cert/csr/sample.com.csr
    fullchain_dest: /etc/httpd/ssl/sample.com-fullchain.crt
    challenge: http-01
  register: certificate_request

# Assume something went wrong. certificate_request.order_uri contains
# the order URI.

- name: Get order information
  community.crypto.acme_inspect:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    account_key_src: /etc/pki/cert/private/account.key
    account_uri: "{{ account_creation.headers.location }}"
    url: "{{ certificate_request.order_uri }}"
    method: get
  register: order

- name: Get first authz for order
  community.crypto.acme_inspect:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    account_key_src: /etc/pki/cert/private/account.key
    account_uri: "{{ account_creation.headers.location }}"
    url: "{{ order.output_json.authorizations[0] }}"
    method: get
  register: authz

- name: Get HTTP-01 challenge for authz
  community.crypto.acme_inspect:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    account_key_src: /etc/pki/cert/private/account.key
    account_uri: "{{ account_creation.headers.location }}"
    url: "{{ authz.output_json.challenges | selectattr('type', 'equalto', 'http-01') }}"
    method: get
  register: http01challenge

- name: Activate HTTP-01 challenge manually
  community.crypto.acme_inspect:
    acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
    acme_version: 2
    account_key_src: /etc/pki/cert/private/account.key
    account_uri: "{{ account_creation.headers.location }}"
    url: "{{ http01challenge.url }}"
    method: post
    content: '{}'

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

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

Ключ Возвращаемое значение Описание
directory
словарь
всегда
Содержимое каталога ACME

Пример:
{ "a85k3x9f91A4": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417", "keyChange": "https://acme-v02.api.letsencrypt.org/acme/key-change", "meta": { "caaIdentities": [ "letsencrypt.org" ], "termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf", "website": "https://letsencrypt.org" }, "newAccount": "https://acme-v02.api.letsencrypt.org/acme/new-acct", "newNonce": "https://acme-v02.api.letsencrypt.org/acme/new-nonce", "newOrder": "https://acme-v02.api.letsencrypt.org/acme/new-order", "revokeCert": "https://acme-v02.api.letsencrypt.org/acme/revoke-cert" }
headers
словарь
всегда
HTTP-заголовки запроса (с ключами в нижнем регистре)

Пример:
{ "boulder-requester": "12345", "cache-control": "max-age=0, no-cache, no-store", "connection": "close", "content-length": "904", "content-type": "application/json", "cookies": {}, "cookies_string": "", "date": "Wed, 07 Nov 2018 12:34:56 GMT", "expires": "Wed, 07 Nov 2018 12:44:56 GMT", "link": "<https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf>;rel="terms-of-service"", "msg": "OK (904 bytes)", "pragma": "no-cache", "replay-nonce": "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGH", "server": "nginx", "status": 200, "strict-transport-security": "max-age=604800", "url": "https://acme-v02.api.letsencrypt.org/acme/acct/46161", "x-frame-options": "DENY" }
output_json
словарь
если выходные данные могут быть распарсены как JSON
Выходные данные, распарсенные как JSON

Пример:
[{'id': 12345}, {'key': [{'kty': 'RSA'}, '...']}]
output_text
строка
всегда
Исходный текстовый вывод

Пример:
{ "id": 12345, "key": { "kty": "RSA", ...


Авторы

  • Felix Fontein (@felixfontein)

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/community/crypto/acme_inspect_module.html

Spec-Zone.ru

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