Spec-Zone.ru › Ansible 2.11

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

Примечание

Этот плагин входит в коллекцию community.crypto (версия 1.4.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, а для 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 для классических конечных точек Let’s Encrypt и Buypass ACME или 2 для стандартных конечных точек ACME v2.
Значение по умолчанию — 1. Обратите внимание, что в community.crypto 2.0.0 этот параметр станет обязательным и больше не будет иметь значения по умолчанию.
Обратите также внимание, что поддержка ACME v1 будет в конечном итоге устаревать.
content
строка
Закодированный JSON-объект, который будет отправлен в качестве содержимого, если method — post.
Требуется, когда method — post, и недопустимо в противном случае.
fail_on_acme_error
булево
    Варианты:
  • нет
  • да ←
Если method — post или get, модуль завершится с ошибкой в случае возврата ошибки ACME.
method
строка
    Варианты:
  • получить ←
  • отправить
  • только-каталог
Метод для доступа к указанному URL-адресу на сервере ACME.
Значение post выполняет аутентифицированный POST-запрос. Содержимое должно быть указано в параметре content.
Значение get выполняет аутентифицированный POST-запрос как GET-запрос для ACME v2 и обычный GET-запрос для ACME v1.
Значение directory-only извлекает только каталог без выполнения запроса.
select_crypto_backend
строка
    Варианты:
  • авто ←
  • cryptography
  • openssl
Определяет используемый криптографический бэкенд.
Значение по умолчанию — auto, которое пытается использовать cryptography, если оно доступно, и переходит к openssl.
Если задано значение openssl, будет использоваться бинарник openssl.
Если задано значение cryptography, будет использоваться библиотека cryptography.
url
строка
URL-адрес для отправки запроса.
Должен быть указан, если method не равно directory-only.
validate_certs
булево
    Варианты:
  • нет
  • да ←
Указывает, нужно ли проверять сертификаты 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, этот модуль в принципе может быть использован с любым CA, предоставляющим конечную точку ACME, например, Buypass Go SSL.

См. также

См. также

Automatic Certificate Management Environment (ACME)

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

ACME TLS ALPN Challenge Extension

Спецификация расширения вызова 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 байт)", "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–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/crypto/acme_inspect_module.html

Spec-Zone.ru

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