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 целое число |
| Версия 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 логическое значение |
| Если method — post или get, модуль завершится ошибкой, если будет возвращена ошибка ACME. |
| method строка |
| Метод доступа к заданному URL на сервере ACME. Значение post выполняет аутентифицированный POST-запрос. Содержимое должно быть указано в параметре content.Значение get выполняет аутентифицированный POST-как-GET запрос для ACME v2 и обычный GET-запрос для ACME v1.Значение directory-only получает только каталог без выполнения запроса. |
| select_crypto_backend строка |
| Определяет, какой криптографический бэкенд использовать. Значение по умолчанию — 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, в принципе модуль может быть использован с любым центром сертификации, предоставляющим конечную точку 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