community.crypto.openssl_csr – Генерация запроса на подпись сертификата OpenSSL (CSR)
Примечание
Этот плагин входит в коллекцию community.crypto (версия 1.4.0).
Для его установки используйте: ansible-galaxy collection install community.crypto
Для использования в playbook укажите: community.crypto.openssl_csr
Обзор
- Обратите внимание, что модуль пересоздаёт существующий CSR, если он не соответствует параметрам модуля или кажется повреждённым. Если вы беспокоитесь о перезаписи существующего CSR, рассмотрите использование параметра backup.
- Модуль может использовать библиотеку cryptography Python или pyOpenSSL Python. По умолчанию он пытается определить, какая из них доступна. Это можно переопределить с помощью параметра select_crypto_backend. Обратите внимание, что бэкэнд PyOpenSSL был устаревшим в Ansible 2.9 и будет удалён в community.crypto 2.0.0.
- Этот модуль позволяет (пере)генерировать запросы на подпись сертификатов OpenSSL.
- Этот модуль поддерживает расширения subjectAltName, keyUsage, extendedKeyUsage, basicConstraints и OCSP Must Staple.
Требования
Ниже перечислены требования к хосту, на котором выполняется этот модуль.
- cryptography >= 1.3
- Или pyOpenSSL >= 0.15
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| attributes строка добавлен в 2.3 модуля ansible.builtin | Атрибуты, которые должны быть у результирующего файла или каталога. Чтобы узнать поддерживаемые флаги, обратитесь к странице справки для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и при отображении командой lsattr. Оператор = используется по умолчанию, в противном случае необходимо включить операторы +, -. псевдонимы: attr | ||
| authority_cert_issuer список / элементы=строка | Имена, которые будут присутствовать в поле issuer сертификата в запросе на подписание сертификата. Значения должны быть префиксрованы соответствующими опциями. (например, email, URI, DNS, RID, IP, dirName, otherName, и те, которые специфичны для вашего CA)Пример: DNS:ca.example.orgЕсли указано, то также должно быть указано authority_key_identifier. Обратите внимание, что коммерческие CA игнорируют это значение, соответственно используют значение по своему выбору. Указание этого параметра полезно в основном для самоподписанных сертификатов или для собственных CA. Обратите внимание, что это поддерживается только если используется бэкенд cryptography. AuthorityKeyIdentifier будет добавлен только если указан хотя бы один из параметров: authority_key_identifier, authority_cert_issuer и authority_cert_serial_number. | ||
| authority_cert_serial_number целое число | Серийный номер сертификата уполномочивающего центра. Обратите внимание, что это поддерживается только если используется бэкенд cryptography. Обратите внимание, что коммерческие CA игнорируют это значение, соответственно используют значение по своему выбору. Указание этого параметра полезно в основном для самоподписанных сертификатов или для собственных CA. AuthorityKeyIdentifier будет добавлен только если указан хотя бы один из параметров: authority_key_identifier, authority_cert_issuer и authority_cert_serial_number. | ||
| authority_key_identifier строка | Идентификатор ключа уполномочивающего центра в виде шестнадцатеричной строки, где два байта разделены двоеточиями. Пример: 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33Если указано, то также должно быть указано authority_cert_issuer. Обратите внимание, что коммерческие CA игнорируют это значение, соответственно используют значение по своему выбору. Указание этого параметра полезно в основном для самоподписанных сертификатов или для собственных CA. Обратите внимание, что это поддерживается только если используется бэкенд cryptography. AuthorityKeyIdentifier будет добавлен только если указан хотя бы один из параметров: authority_key_identifier, authority_cert_issuer и authority_cert_serial_number. | ||
| backup булево |
| Создать резервную копию файла, включая отметку времени, чтобы можно было восстановить исходный запрос CSR, если вы перезаписали его новым случайно. | |
| basic_constraints список / элементы=строка | Указывает базовые ограничения, такие как является ли сертификат центром сертификации. псевдонимы: basicConstraints | ||
| basic_constraints_critical булево |
| Должен ли расширение basicConstraints рассматриваться как критическое. псевдонимы: basicConstraints_critical | |
| common_name строка | Поле commonName субъекта запроса на подписание сертификата. псевдонимы: CN, commonName | ||
| country_name строка | Поле countryName субъекта запроса на подписание сертификата. псевдонимы: C, countryName | ||
| create_subject_key_identifier булево |
| Создать идентификатор ключа субъекта из открытого ключа. Обратите внимание, что коммерческие CA могут игнорировать это значение или использовать своё по умолчанию. Указание этого параметра полезно в основном для самоподписанных сертификатов или для собственных CA. Обратите внимание, что это поддерживается только если используется бэкенд cryptography. | |
| crl_distribution_points список / элементы=словарь добавлен в 1.4.0 модуля community.crypto | Позволяет указать одну или несколько точек распространения CRL. Поддерживается только бэкендом cryptography. | ||
| crl_issuer список / элементы=строка | Информация об издателе CRL. | ||
| full_name список / элементы=строка | Описывает, как можно получить CRL. Взаимоисключающие с relative_name. Пример: URI:https://ca.example.com/revocations.crl. | ||
| reasons список / элементы=строка |
| Список причин, по которым эта точка распространения может быть использована при проверке отзыва. | |
| relative_name список / элементы=строка | Описывает, как можно получить CRL относительно издателя CRL. Взаимоисключающие с full_name. Пример: /CN=example.com. Может быть использован только при установке cryptography >= 1.6. | ||
| digest строка | Значение по умолчанию: "sha256" | Хеш-функция, используемая при подписании запроса на подписание сертификата закрытым ключом. | |
| email_address строка | Поле emailAddress субъекта запроса на подписание сертификата. псевдонимы: E, emailAddress | ||
| extended_key_usage список / элементы=строка | Дополнительные ограничения (например, аутентификация клиента, аутентификация сервера) на разрешенные цели, для которых может использоваться открытый ключ. псевдонимы: extKeyUsage, extendedKeyUsage | ||
| extended_key_usage_critical булево |
| Должен ли расширение extkeyUsage рассматриваться как критическое. псевдонимы: extKeyUsage_critical, extendedKeyUsage_critical | |
| force булево |
| Должен ли запрос на подписание сертификата быть принудительно перегенерирован этим модулем ansible. | |
| group строка | Имя группы, которой должен принадлежать файл/каталог, как если бы оно было передано в chown. | ||
| key_usage список / элементы=строка | Определяет назначение (например, шифрование, подпись, подписание сертификата) ключа, содержащегося в сертификате. псевдонимы: keyUsage | ||
| key_usage_critical булево |
| Должен ли расширение keyUsage рассматриваться как критическое. псевдонимы: keyUsage_critical | |
| locality_name строка | Поле localityName субъекта запроса на подписание сертификата. псевдонимы: L, localityName | ||
| mode сырое | Разрешения, которые должен иметь результирующий файл или каталог. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны либо добавить ведущую нуль, чтобы интерпретатор YAML Ansible понял, что это восьмеричное число (например, 0644 или 01777), или заключить его в кавычки (например, '644' или '1777'), чтобы Ansible получил строку и мог выполнить собственное преобразование из строки в число.Передача Ansible числа без выполнения одного из этих правил приведет к десятичному числу, что повлечет за собой непредвиденные результаты. Начиная с Ansible 1.8, режим может быть указан в символической форме (например, u+rwx или u=rw,g=r,o=r).Если mode не указано, а целевой файл не существует, значение по умолчанию umask на системе будет использоваться при установке режима для вновь созданного файла.Если mode не указано, а целевой файл существует, режим существующего файла будет использован.Указание mode — лучший способ гарантировать, что файлы создаются с правильными разрешениями. См. CVE-2020-1736 для получения дополнительной информации. | ||
| name_constraints_critical булево добавлен в 1.1.0 модуля community.crypto |
| Должен ли расширение Name Constraints рассматриваться как критическое. | |
| name_constraints_excluded список / элементы=строка добавлен в 1.1.0 модуля community.crypto | Для сертификатов CA это определяет список идентификаторов, которые описывают поддеревья имён, для которых эта CA не имеет права выдавать сертификаты. Значения должны быть префиксрованы соответствующими опциями. (например, email, URI, DNS, RID, IP, dirName, otherName, и те, которые специфичны для вашего CA). | ||
| name_constraints_permitted список / элементы=строка добавлено в 1.1.0 community.crypto | Для сертификатов CA это определяет список идентификаторов, которые описывают поддеревья имён, для которых этот CA разрешено выдавать сертификаты. Значения должны быть префиксными своими параметрами. (т.е., email, URI, DNS, RID, IP, dirName, otherName и те, что специфичны для вашего CA). | ||
| ocsp_must_staple булево |
| Указывает, что сертификат должен содержать расширение OCSP Must Staple (https://tools.ietf.org/html/rfc7633). псевдонимы: ocspMustStaple | |
| ocsp_must_staple_critical булево |
| Должно ли расширение OCSP Must Staple рассматриваться как критическое. Обратите внимание, что согласно RFC, это расширение не должно отмечаться как критическое, так как старые клиенты, не знающие об OCSP Must Staple, должны отклонять такие сертификаты (см. https://tools.ietf.org/html/rfc7633#section-4). псевдонимы: ocspMustStaple_critical | |
| organization_name строка | Поле organizationName субъекта запроса на подписание сертификата. псевдонимы: O, organizationName | ||
| organizational_unit_name строка | Поле organizationalUnitName субъекта запроса на подписание сертификата. псевдонимы: OU, organizationalUnitName | ||
| owner строка | Имя пользователя, который должен владеть файлом/каталогом, как это было бы передано в chown. | ||
| path путь / обязательно | Имя файла, в который будет записан сгенерированный запрос на подписание OpenSSL сертификата. | ||
| privatekey_content строка добавлено в 1.0.0 community.crypto | Содержимое закрытого ключа, используемого для подписания запроса на подписание сертификата. Либо privatekey_path, либо privatekey_content должны быть указаны, если state равно present, но не оба. | ||
| privatekey_passphrase строка | Пароль для закрытого ключа. Это необходимо, если закрытый ключ защищён паролем. | ||
| privatekey_path путь | Путь к закрытому ключу, используемому для подписания запроса на подписание сертификата. Либо privatekey_path, либо privatekey_content должны быть указаны, если state равно present, но не оба. | ||
| return_content булево добавлено в 1.0.0 community.crypto |
| Если установлено yes, вернёт содержимое (текущего или сгенерированного) CSR в виде csr. | |
| select_crypto_backend строка |
| Определяет, какой криптографический бэкенд использовать. По умолчанию используется auto, который пытается использовать cryptography при наличии, и переходит к pyopenssl. Если установлено pyopenssl, будет использована библиотека pyOpenSSL.Если установлено cryptography, будет использована библиотека cryptography.Обратите внимание, что бэкенд pyopenssl устарел в Ansible 2.9 и будет удален в community.crypto 2.0.0. С этого момента будет доступен только бэкенд cryptography. | |
| selevel строка | Часть SELinux контекста файла, отвечающая за уровень. Это атрибут MLS/MCS, иногда известный как range.Если установлено _default, будет использоваться часть политики level, если доступна. | ||
| serole строка | Часть SELinux контекста файла, отвечающая за роль. Если установлено _default, будет использоваться часть политики role, если доступна. | ||
| setype строка | Часть SELinux контекста файла, отвечающая за тип. Если установлено _default, будет использоваться часть политики type, если доступна. | ||
| seuser строка | Часть SELinux контекста файла, отвечающая за пользователя. По умолчанию используется политика system, где применимо.Если установлено _default, будет использоваться часть политики user, если доступна. | ||
| state строка |
| Указывает, должен ли запрос на подписание сертификата существовать или нет, принимая меры, если состояние отличается от указанного. | |
| state_or_province_name строка | Поле stateOrProvinceName субъекта запроса на подписание сертификата. псевдонимы: ST, stateOrProvinceName | ||
| subject словарь | Ключевые/значения пары, которые будут присутствовать в поле имени субъекта запроса на подписание сертификата. Если вам нужно указать более одного значения с тем же ключом, используйте список в качестве значения. | ||
| subject_alt_name список / элементы=строка | Расширение Subject Alternative Name (SAN) для добавления в запрос на подписание сертификата. Это может быть либо «строка, разделённая запятыми», либо список YAML. Значения должны быть префиксными своими параметрами. (т.е., email, URI, DNS, RID, IP, dirName, otherName и те, что специфичны для вашего CA).Обратите внимание, что если SAN не указан, но указано общее имя, общее имя будет добавлено как SAN, за исключением случая, когда useCommonNameForSAN установлено в false.Подробнее в https://tools.ietf.org/html/rfc5280#section-4.2.1.6. псевдонимы: subjectAltName | ||
| subject_alt_name_critical булево |
| Должно ли расширение subjectAltName рассматриваться как критическое. псевдонимы: subjectAltName_critical | |
| subject_key_identifier строка | Идентификатор ключа субъекта в виде шестнадцатеричной строки, где два байта разделены двоеточиями. Пример: 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33Обратите внимание, что коммерческие CA игнорируют это значение или используют своё собственное. Указание этого параметра в основном полезно для самоподписанных сертификатов или для собственных CA. Обратите внимание, что этот параметр может быть использован только если create_subject_key_identifier равно no. Обратите внимание, что это поддерживается только если используется бэкенд cryptography. | ||
| unsafe_writes булево добавлено в 2.2 ansible.builtin |
| Влияние на использование атомарных операций для предотвращения повреждения данных или несогласованных чтений из целевого файла. По умолчанию этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованных чтений из целевых файлов, но иногда системы настроены или просто неисправны таким образом, что это не возможно. Одним из примеров являются файлы, смонтированные в Docker, которые не могут обновляться атомарно изнутри контейнера и могут быть записаны только небезопасным способом. Этот параметр позволяет Ansible переходить к небезопасным методам обновления файлов при сбое атомарных операций (хотя он не заставляет Ansible выполнять небезопасные записи). ВАЖНО! Небезопасные записи подвержены гонкам и могут привести к повреждению данных. | |
| use_common_name_for_san булево |
| Если установлено yes, модуль заполнит общее имя для subject_alt_name префиксом DNS:, если SAN не указан.псевдонимы: useCommonNameForSAN | |
| version целое число | По умолчанию: 1 | Версия запроса на подписание сертификата. Единственное допустимое значение согласно RFC 2986 — 1. Этот параметр больше не будет принимать недопустимые значения начиная с community.crypto 2.0.0. | |
Примечания
Примечание
- Если запрос на подписание сертификата уже существует, будет проверено, содержат ли subjectAltName, keyUsage, extendedKeyUsage и basicConstraints только запрошенные значения, соответствует ли OCSP Must Staple запросу и подписан ли запрос указанным закрытым ключом.
См. также
См. также
- community.crypto.openssl_csr_pipe
-
Официальная документация модуля community.crypto.openssl_csr_pipe.
- community.crypto.x509_certificate
-
Официальная документация модуля community.crypto.x509_certificate.
- community.crypto.x509_certificate_pipe
-
Официальная документация модуля community.crypto.x509_certificate_pipe.
- community.crypto.openssl_dhparam
-
Официальная документация модуля community.crypto.openssl_dhparam.
- community.crypto.openssl_pkcs12
-
Официальная документация модуля community.crypto.openssl_pkcs12.
- community.crypto.openssl_privatekey
-
Официальная документация модуля community.crypto.openssl_privatekey.
- community.crypto.openssl_privatekey_pipe
-
Официальная документация модуля community.crypto.openssl_privatekey_pipe.
- community.crypto.openssl_publickey
-
Официальная документация модуля community.crypto.openssl_publickey.
- community.crypto.openssl_csr_info
-
Официальная документация модуля community.crypto.openssl_csr_info.
Примеры
- name: Generate an OpenSSL Certificate Signing Request
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
common_name: www.ansible.com
- name: Generate an OpenSSL Certificate Signing Request with an inline key
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_content: "{{ private_key_content }}"
common_name: www.ansible.com
- name: Generate an OpenSSL Certificate Signing Request with a passphrase protected private key
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
privatekey_passphrase: ansible
common_name: www.ansible.com
- name: Generate an OpenSSL Certificate Signing Request with Subject information
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
country_name: FR
organization_name: Ansible
email_address: jdoe@ansible.com
common_name: www.ansible.com
- name: Generate an OpenSSL Certificate Signing Request with subjectAltName extension
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
subject_alt_name: 'DNS:www.ansible.com,DNS:m.ansible.com'
- name: Generate an OpenSSL CSR with subjectAltName extension with dynamic list
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
subject_alt_name: "{{ item.value | map('regex_replace', '^', 'DNS:') | list }}"
with_dict:
dns_server:
- www.ansible.com
- m.ansible.com
- name: Force regenerate an OpenSSL Certificate Signing Request
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
force: yes
common_name: www.ansible.com
- name: Generate an OpenSSL Certificate Signing Request with special key usages
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
common_name: www.ansible.com
key_usage:
- digitalSignature
- keyAgreement
extended_key_usage:
- clientAuth
- name: Generate an OpenSSL Certificate Signing Request with OCSP Must Staple
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
common_name: www.ansible.com
ocsp_must_staple: yes
- name: Generate an OpenSSL Certificate Signing Request for WinRM Certificate authentication
community.crypto.openssl_csr:
path: /etc/ssl/csr/winrm.auth.csr
privatekey_path: /etc/ssl/private/winrm.auth.pem
common_name: username
extended_key_usage:
- clientAuth
subject_alt_name: otherName:1.3.6.1.4.1.311.20.2.3;UTF8:username@localhost
- name: Generate an OpenSSL Certificate Signing Request with a CRL distribution point
community.crypto.openssl_csr:
path: /etc/ssl/csr/www.ansible.com.csr
privatekey_path: /etc/ssl/private/ansible.com.pem
common_name: www.ansible.com
crl_distribution_points:
- full_name:
- "URI:https://ca.example.com/revocations.crl"
crl_issuer:
- "URI:https://ca.example.com/"
reasons:
- key_compromise
- ca_compromise
- cessation_of_operation
Значения возврата
Общие значения возврата описаны здесь, следующие являются полями, уникальными для данного модуля:
| Ключ | Возвращённое значение | Описание |
|---|---|---|
| backup_file строка | изменено и если backup yes
| Имя созданного файла резервной копии. Пример: /path/to/www.ansible.com.csr.2019-03-09@11:22~ |
| basicConstraints список / элементы=строка | изменено или успех | Указывает, принадлежит ли сертификат ЦС Пример: ['CA:TRUE', 'pathLenConstraint:0'] |
| csr строка добавлен в версии 1.0.0 community.crypto | если state present и return_content yes
| Содержимое (текущего или сгенерированного) CSR. |
| extendedKeyUsage список / элементы=строка | изменено или успех | Дополнительное ограничение на цели использования открытого ключа Пример: ['clientAuth'] |
| filename строка | изменено или успех | Путь к сгенерированному запросу на подпись сертификата Пример: /etc/ssl/csr/www.ansible.com.csr |
| keyUsage список / элементы=строка | изменено или успех | Цель, для которой может быть использован открытый ключ Пример: ['digitalSignature', 'keyAgreement'] |
| name_constraints_excluded список / элементы=строка добавлен в версии 1.1.0 community.crypto | изменено или успех | Список исключённых поддеревьев, для которых ЦС не может подписывать сертификаты. Пример: ['email:.com'] |
| name_constraints_permitted список / элементы=строка добавлен в версии 1.1.0 community.crypto | изменено или успех | Список разрешённых поддеревьев для подписи сертификатов. Пример: ['email:.somedomain.com'] |
| ocsp_must_staple булево | изменено или успех | Указывает, включена ли функция OCSP Must Staple для сертификата |
| privatekey строка | изменено или успех | Путь к закрытому ключу TLS/SSL, для которого был сгенерирован CSR Будет none если закрытый ключ был предоставлен в privatekey_content.Пример: /etc/ssl/private/ansible.com.pem |
| subject список / элементы=список | изменено или успех | Список кортежей субъектов, прикрепленных к CSR Пример: [('CN', 'www.ansible.com'), ('O', 'Ansible')] |
| subjectAltName список / элементы=строка | изменено или успех | Альтернативные имена, для которых этот CSR действителен Пример: ['DNS:www.ansible.com', 'DNS:m.ansible.com'] |
Авторы
- Yanis Guenane (@Spredzy)
- 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/openssl_csr_module.html