openssl_certificate – Генерация и/или проверка сертификатов OpenSSL
Новое в версии 2.4.
Обзор
- Этот модуль позволяет (пере)генерировать сертификаты OpenSSL.
- Он реализует понятие поставщика (т.е.
selfsigned,ownca,acme,assertonly) для вашего сертификата. - Поставщик
assertonlyпредназначен для случаев, когда вас интересует только проверка свойств предоставленного сертификата. - Поставщик
owncaпредназначен для генерации сертификата OpenSSL, подписанного вашим собственным сертификатом УЦ (Центр сертификации) (самозаверяющий сертификат). - Многие свойства, которые можно указать в этом модуле, предназначены для проверки существующего или недавно сгенерированного сертификата. Правильное место для их указания, если вы хотите получить сертификат с этими свойствами, — это CSR (запрос на подпись сертификата).
- Обратите внимание, что модуль перегенерирует существующий сертификат, если он не соответствует параметрам модуля или, кажется, поврежден. Если вас беспокоит, что это может перезаписать ваш существующий сертификат, рассмотрите опцию backup.
- Он использует библиотеку pyOpenSSL или cryptography для взаимодействия с OpenSSL.
- Если доступны обе библиотеки cryptography и PyOpenSSL (и удовлетворяют минимальным требованиям по версии), cryptography будет предпочтительнее, чем PyOpenSSL, в качестве бэкенда (если бэкенд не принудительно выбран с помощью
select_crypto_backend).
Требования
Ниже перечислены требования к хосту, на котором выполняется этот модуль.
- PyOpenSSL >= 0.15 или cryptography >= 1.6 (если используется поставщик
selfsignedилиassertonly) - acme-tiny (если используется поставщик
acme)
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| acme_accountkey_path путь | Путь к ключу учетной записи (accountkey) для поставщика acme. Используется только поставщиком acme. | |
| acme_chain логическое значение добавлен в 2.5 |
| Включить промежуточный сертификат в сгенерированный сертификат Используется только поставщиком acme. Обратите внимание, что это доступно только для более старых версий acme-tiny. Новые версии автоматически включают цепочку, а установка acme_chain в yes приводит к ошибке. |
| acme_challenge_path путь | Путь к каталогу вызовов ACME, который предоставляется по адресу http://<HOST>:80/.well-known/acme-challenge/ Используется только поставщиком acme. | |
| attributes строка добавлен в 2.3 | Атрибуты, которые должен иметь полученный файл или каталог. Для получения поддерживаемых флагов обратитесь к странице справки для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и в выводе команды lsattr. Оператор = предполагается по умолчанию, в противном случае операторы + или - должны быть включены в строку.псевдонимы: attr | |
| backup логическое значение добавлен в 2.8 |
| Создать резервную копию файла, включая отметку времени, чтобы можно было восстановить исходный сертификат, если вы случайно перезаписали его новым. Не используется поставщиком assertonly. |
| csr_path путь | Путь к запросу на подписание сертификата (CSR), используемому для генерации этого сертификата. Не требуется в режиме assertonly. | |
| extended_key_usage список | Поле расширенного использования ключа (extended_key_usage) должно содержать все эти значения. Используется только поставщиком assertonly. псевдонимы: extendedKeyUsage | |
| extended_key_usage_strict логическое значение |
| Если установлено yes, поле расширенного использования ключа (extended_key_usage) должно содержать только эти значения.Используется только поставщиком assertonly. псевдонимы: extendedKeyUsage_strict |
| force логическое значение |
| Сгенерировать сертификат, даже если он уже существует. |
| group строка | Имя группы, которой должен принадлежать файл/каталог (как в команде chown). | |
| has_expired логическое значение |
| Проверяет, истек ли срок действия сертификата в момент выполнения модуля. Используется только поставщиком assertonly. |
| invalid_at строка | Сертификат должен быть недействителен в данный момент времени. Отметка времени отформатирована в формате ASN.1 TIME. Используется только поставщиком assertonly. | |
| issuer словарь | Пары ключ/значение, которые должны присутствовать в поле имени издателя сертификата. Если необходимо указать более одного значения с одинаковым ключом, используйте список в качестве значения. Используется только поставщиком assertonly. | |
| issuer_strict логическое значение добавлен в 2.5 |
| Если установлено yes, поле issuer должно содержать только эти значения.Используется только поставщиком assertonly. |
| key_usage список | Поле расширенного использования ключа (key_usage) должно содержать все эти значения. Используется только поставщиком assertonly. псевдонимы: keyUsage | |
| key_usage_strict логическое значение |
| Если установлено yes, поле key_usage должно содержать только эти значения.Используется только поставщиком assertonly. псевдонимы: keyUsage_strict |
| mode строка | Разрешения, которые должен иметь полученный файл или каталог. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны либо добавить ведущую нуль, чтобы парсер YAML Ansible знал, что это восьмеричное число (например, 0644 или 01777) или заключить его в кавычки (например, '644' или '1777') так Ansible получит строку и сможет выполнить преобразование из строки в число.Если Ansible получит число без одного из этих правил, получится десятичное число, которое приведет к непредсказуемым результатам. Начиная с Ansible 1.8, режим может быть указан в символической форме (например, u+rwx или u=rw,g=r,o=r). | |
| not_after строка | Сертификат должен истечь в данный момент времени. Отметка времени отформатирована в формате ASN.1 TIME. Используется только поставщиком assertonly. псевдонимы: notAfter | |
| not_before строка | Сертификат должен начать действовать в данный момент времени. Отметка времени отформатирована в формате ASN.1 TIME. Используется только поставщиком assertonly. псевдонимы: notBefore | |
| ownca_digest строка добавлен в 2.7 | Значение по умолчанию: "sha256" | Алгоритм хеширования, используемый для сертификата ownca. Используется только поставщиком ownca. |
| ownca_not_after строка добавлен в 2.7 | Значение по умолчанию: "+3650d" | Точка времени, в которой сертификат перестает быть действительным. Время может быть указано как относительное время, так и как абсолютная отметка времени. Время всегда интерпретируется как UTC. Формат [+-]timespec | ASN.1 TIME, где timespec может быть целым числом + [w | d | h | m | s] (например, +32w1d2h).Обратите внимание, что при использовании относительного времени этот модуль НЕ идемпотентен. Если это значение не указано, сертификат перестанет быть действительным через 10 лет. Используется только поставщиком ownca. |
| ownca_not_before строка добавлен в 2.7 | Значение по умолчанию: "+0s" | Точка времени, с которой сертификат становится действительным. Время может быть указано как относительное время, так и как абсолютная отметка времени. Время всегда интерпретируется как UTC. Формат [+-]timespec | ASN.1 TIME, где timespec может быть целым числом + [w | d | h | m | s] (например, +32w1d2h).Обратите внимание, что при использовании относительного времени этот модуль НЕ идемпотентен. Если это значение не указано, сертификат начнет действовать сейчас. Используется только поставщиком ownca. |
| ownca_path путь добавлен в 2.7 | Полный путь к сертификату CA (Центрального органа сертификации). Используется только поставщиком ownca. |
| ownca_privatekey_passphrase строка добавлен в 2.7 | Пароль к ownca_privatekey_path. Используется только поставщиком ownca. | |
| ownca_privatekey_path путь добавлен в 2.7 | Путь к закрытому ключу CA (Certificate Authority), используемому при подписании сертификата. Используется только поставщиком ownca. | |
| ownca_version целое число добавлен в 2.7 | По умолчанию: 3 | Версия сертификата ownca. В настоящее время она почти всегда должна быть 3. Используется только поставщиком ownca. |
| owner строка | Имя пользователя, который должен владеть файлом/каталогом (как в команде chown). | |
| path путь / обязательно | Абсолютный удаленный путь, где должен быть создан или уже находится созданный файл сертификата. | |
| privatekey_passphrase строка | Пароль к privatekey_path. Требуется, если закрытый ключ защищен паролем. | |
| privatekey_path путь | Путь к закрытому ключу, используемому при подписании сертификата. | |
| provider строка / обязательно |
| Имя поставщика для генерации/получения сертификата OpenSSL. Поставщик assertonly не будет генерировать файлы и завершится ошибкой, если файл сертификата отсутствует. |
| select_crypto_backend строка добавлен в 2.8 |
| Определяет, какой криптографический бэкенд использовать. По умолчанию выбирается auto, который пытается использовать cryptography, если доступен, и возвращается к pyopenssl. Если установлено pyopenssl, будет пытаться использовать библиотеку pyOpenSSL.Если установлено cryptography, будет пытаться использовать библиотеку cryptography. |
| selevel строка | По умолчанию: "s0" | Часть контекста файла SELinux, отвечающая за уровень. Это атрибут MLS/MCS, иногда известный как range. При установке _default, будет использоваться часть политики level, если она доступна. |
| selfsigned_digest строка | По умолчанию: "sha256" | Алгоритм хеширования, используемый при самоподписании сертификата. Используется только поставщиком selfsigned. |
| selfsigned_not_after строка | По умолчанию: "+3650d" | Время, по истечении которого сертификат перестаёт быть действительным. Время может быть указано либо как относительное время, либо как абсолютная метка времени. Время всегда интерпретируется как UTC. Допустимый формат: [+-]timespec | ASN.1 TIME, где timespec может быть целым числом + [w | d | h | m | s] (например, +32w1d2h).Обратите внимание, что при использовании относительного времени этот модуль НЕ идемпотентен. Если это значение не указано, сертификат перестанет быть действительным через 10 лет. Используется только поставщиком selfsigned. псевдонимы: selfsigned_notAfter |
| selfsigned_not_before строка | По умолчанию: "+0s" | Время, с которого сертификат начинает быть действительным. Время может быть указано либо как относительное время, либо как абсолютная метка времени. Время всегда интерпретируется как UTC. Допустимый формат: [+-]timespec | ASN.1 TIME, где timespec может быть целым числом + [w | d | h | m | s] (например, +32w1d2h).Обратите внимание, что при использовании относительного времени этот модуль НЕ идемпотентен. Если это значение не указано, сертификат начнёт действовать с текущего момента. Используется только поставщиком selfsigned. псевдонимы: selfsigned_notBefore |
| selfsigned_version целое число добавлен в 2.5 | По умолчанию: 3 | Версия сертификата selfsigned. В настоящее время она почти всегда должна быть 3. Используется только поставщиком selfsigned. |
| serole строка | Часть контекста файла SELinux, отвечающая за роль. При установке _default, будет использоваться часть политики role, если она доступна. | |
| setype строка | Часть контекста файла SELinux, отвечающая за тип. При установке _default, будет использоваться часть политики type, если она доступна. | |
| seuser строка | Часть контекста файла SELinux, отвечающая за пользователя. По умолчанию используется политика system, если применимо.При установке _default, будет использоваться часть политики user, если она доступна. | |
| signature_algorithms список | Список алгоритмов, с которыми вы хотите принять подписанный сертификат (например, ['sha256WithRSAEncryption', 'sha512WithRSAEncryption']). Используется только поставщиком assertonly. | |
| state строка |
| Указывает, должен ли существовать сертификат или нет, выполняя действия, если состояние отличается от указанного. |
| subject словарь | Пары ключ/значение, которые должны присутствовать в поле имени субъекта сертификата. Если вам нужно указать более одного значения с одним ключом, используйте список в качестве значения. Используется только поставщиком assertonly. | |
| subject_alt_name список | Поле расширения subject_alt_name должно содержать эти значения. Используется только поставщиком assertonly. псевдонимы: subjectAltName | |
| subject_alt_name_strict булево |
| Если установлено yes, поле расширения subject_alt_name должно содержать только эти значения.Используется только поставщиком assertonly. псевдонимы: subjectAltName_strict |
| subject_strict булево добавлен в 2.5 |
| Если установлено yes, поле subject должно содержать только эти значения.Используется только поставщиком assertonly. |
| unsafe_writes булево добавлен в 2.2 |
| Влияет на использование атомарных операций для предотвращения повреждения данных или несогласованных чтений из целевого файла. По умолчанию этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованных чтений из целевых файлов, но иногда системы настроены или просто не работают так, чтобы это было возможно. Один пример — файлы, монтированные с помощью docker, которые не могут обновляться атомарно изнутри контейнера и могут записываться только неатомарно. Этот параметр позволяет Ansible переходить к небезопасным методам обновления файлов при сбое атомарных операций (однако это не заставляет Ansible выполнять небезопасные записи). ВАЖНО! Небезопасные записи подвержены гонкам и могут привести к повреждению данных. |
| valid_at строка | Сертификат должен быть действительным в данный момент времени. Отметка времени отформатирована как ASN.1 TIME. Используется только поставщиком assertonly. | |
| valid_in строка | Сертификат должен оставаться действительным в течение относительного временного смещения от текущего момента. Допустимый формат - [+-]timespec | number_of_seconds, где timespec может быть целым числом + [w | d | h | m | s] (например, +32w1d2h).Обратите внимание, что при использовании этого параметра этот модуль НЕ идемпотентен. Используется только поставщиком assertonly. | |
| version целое число | Версия сертификата. В настоящее время она почти всегда должна быть 3. Используется только поставщиком assertonly. |
Примечания
Примечание
- Все значения ASN.1 TIME должны быть указаны в соответствии с шаблоном YYYYMMDDHHMMSSZ.
- Указанная дата должна быть в UTC. Минуты и секунды обязательны.
- По соображениям безопасности при использовании поставщика
ownca, вы НЕ должны запускать модуль openssl_certificate на целевой машине, а на выделенной машине CA. Рекомендуется не хранить закрытый ключ CA на целевой машине. После подписания сертификат можно перенести на целевую машину.
См. также
См. также
- openssl_csr – Генерация запроса на подписание сертификата OpenSSL (CSR)
- Официальная документация по модулю openssl_csr.
- openssl_dhparam – Генерация параметров Diffie-Hellman OpenSSL
- Официальная документация по модулю openssl_dhparam.
- openssl_pkcs12 – Генерация архива OpenSSL PKCS#12
- Официальная документация по модулю openssl_pkcs12.
- openssl_privatekey – Генерация закрытых ключей OpenSSL
- Официальная документация по модулю openssl_privatekey.
- openssl_publickey – Генерация открытого ключа OpenSSL из закрытого ключа
- Официальная документация по модулю openssl_publickey.
Примеры
- name: Generate a Self Signed OpenSSL certificate
openssl_certificate:
path: /etc/ssl/crt/ansible.com.crt
privatekey_path: /etc/ssl/private/ansible.com.pem
csr_path: /etc/ssl/csr/ansible.com.csr
provider: selfsigned
- name: Generate an OpenSSL certificate signed with your own CA certificate
openssl_certificate:
path: /etc/ssl/crt/ansible.com.crt
csr_path: /etc/ssl/csr/ansible.com.csr
ownca_path: /etc/ssl/crt/ansible_CA.crt
ownca_privatekey_path: /etc/ssl/private/ansible_CA.pem
provider: ownca
- name: Generate a Let's Encrypt Certificate
openssl_certificate:
path: /etc/ssl/crt/ansible.com.crt
csr_path: /etc/ssl/csr/ansible.com.csr
provider: acme
acme_accountkey_path: /etc/ssl/private/ansible.com.pem
acme_challenge_path: /etc/ssl/challenges/ansible.com/
- name: Force (re-)generate a new Let's Encrypt Certificate
openssl_certificate:
path: /etc/ssl/crt/ansible.com.crt
csr_path: /etc/ssl/csr/ansible.com.csr
provider: acme
acme_accountkey_path: /etc/ssl/private/ansible.com.pem
acme_challenge_path: /etc/ssl/challenges/ansible.com/
force: yes
# Examples for some checks one could use the assertonly provider for:
# How to use the assertonly provider to implement and trigger your own custom certificate generation workflow:
- name: Check if a certificate is currently still valid, ignoring failures
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
has_expired: no
ignore_errors: yes
register: validity_check
- name: Run custom task(s) to get a new, valid certificate in case the initial check failed
command: superspecialSSL recreate /etc/ssl/crt/example.com.crt
when: validity_check.failed
- name: Check the new certificate again for validity with the same parameters, this time failing the play if it is still invalid
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
has_expired: no
when: validity_check.failed
# Some other checks that assertonly could be used for:
- name: Verify that an existing certificate was issued by the Let's Encrypt CA and is currently still valid
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
issuer:
O: Let's Encrypt
has_expired: no
- name: Ensure that a certificate uses a modern signature algorithm (no SHA1, MD5 or DSA)
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
signature_algorithms:
- sha224WithRSAEncryption
- sha256WithRSAEncryption
- sha384WithRSAEncryption
- sha512WithRSAEncryption
- sha224WithECDSAEncryption
- sha256WithECDSAEncryption
- sha384WithECDSAEncryption
- sha512WithECDSAEncryption
- name: Ensure that the existing certificate belongs to the specified private key
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
privatekey_path: /etc/ssl/private/example.com.pem
provider: assertonly
- name: Ensure that the existing certificate is still valid at the winter solstice 2017
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
valid_at: 20171221162800Z
- name: Ensure that the existing certificate is still valid 2 weeks (1209600 seconds) from now
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
valid_in: 1209600
- name: Ensure that the existing certificate is only used for digital signatures and encrypting other keys
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
key_usage:
- digitalSignature
- keyEncipherment
key_usage_strict: true
- name: Ensure that the existing certificate can be used for client authentication
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
extended_key_usage:
- clientAuth
- name: Ensure that the existing certificate can only be used for client authentication and time stamping
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
extended_key_usage:
- clientAuth
- 1.3.6.1.5.5.7.3.8
extended_key_usage_strict: true
- name: Ensure that the existing certificate has a certain domain in its subjectAltName
openssl_certificate:
path: /etc/ssl/crt/example.com.crt
provider: assertonly
subject_alt_name:
- www.example.com
- test.example.com
Возвращаемые значения
Общие возвращаемые значения документированы здесь, следующие являются полями, уникальными для этого модуля:
| Ключ | Возвращено | Описание |
|---|---|---|
| backup_file строка | изменено и если backup yes
| Имя созданного файла резервной копии. Пример: /path/to/www.ansible.com.crt.2019-03-09@11:22~ |
| filename строка | изменено или успешно | Путь к сгенерированному сертификату Пример: /etc/ssl/crt/www.ansible.com.crt |
Статус
- Этот модуль не гарантирует обратную совместимость интерфейса. [превью]
- Этот модуль поддерживается сообществом Ansible. [сообщество]
Авторы
- Yanis Guenane (@Spredzy)
- Markus Teufelberger (@MarkusTeufelberger)
Подсказка
Если вы заметите какие-либо проблемы в этой документации, вы можете отредактировать этот документ, чтобы улучшить его.
© 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/openssl_certificate_module.html