Spec-Zone.ru › Ansible 2.8

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

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

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

Описание

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

Требования

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

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

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
account_key_content
строка
добавлен в 2.5
Содержимое ключа RSA или Elliptic Curve ключа учётной записи ACME.
Взаимоисключающее с account_key_src.
Требуется, если account_key_src не используется.
Предупреждение: содержимое будет записано во временный файл, который будет удалён Ansible по завершении работы модуля. Поскольку это важный закрытый ключ — он может быть использован для изменения ключа учётной записи или для отзыва ваших сертификатов, не зная их закрытых ключей —, это может быть неприемлемо.
В случае использования cryptography, содержимое не записывается во временный файл. Тем не менее, это может произойти, если Ansible переместит модуль вместе с его аргументом на узел, на котором он будет выполнен.
account_key_src
путь
Путь к файлу, содержащему ключ RSA или Elliptic Curve ключа учётной записи 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 (для протокола ACME v1). Это создаст технически правильные, но недоверенные сертификаты.
Для 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
целое число
добавлен в 2.5
    Варианты:
  • 1 ←
  • 2
Версия ACME конечной точки.
Должно быть 1 для классических конечных точек Let’s Encrypt и Buypass ACME, или 2 для стандартных конечных точек ACME v2.
... (rest of the table) ... ...

Примечания

Примечание

  • Параметр account_uri должен быть указан для надлежащей аутентификации запросов ACME v2 (кроме запроса new-account).
  • Используя инструмент ansible, acme_inspect может быть использован для непосредственного выполнения запросов ACME без необходимости написания playbook. Например, следующая команда извлекает учётную запись 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
Текущая черновая спецификация вызова tls-alpn-01.

Примеры

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

- name: Create an account
  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
  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
  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
  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
  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
  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
  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
  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": "Ср, 07 ноя 2018 12:34:56 GMT", "expires": "Ср, 07 ноя 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", ...


Статус

  • Этот модуль не гарантирует обратную совместимость. [превью]
  • Этот модуль поддерживается сообществом Ansible. [сообщество]

Авторы

  • 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.8/modules/acme_inspect_module.html

Spec-Zone.ru

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