openssl_certificate - Генерация и/или проверка сертификатов OpenSSL
Новое в версии 2.4.
Описание
- Этот модуль позволяет (пере)генерировать сертификаты OpenSSL. Он реализует понятие провайдера (т.е.
selfsigned,acme,assertonly) для вашего сертификата. Провайдер ‘assertonly’ предназначен для случаев, когда вас интересуют только свойства предоставленного сертификата. Многие свойства, которые можно указать в этом модуле, предназначены для проверки существующего или только что сгенерированного сертификата. Правильное место для их указания, если вы хотите получить сертификат с этими свойствами, — это CSR (запрос на подписание сертификата). Он использует библиотеку pyOpenSSL для взаимодействия с OpenSSL.
Требования
Ниже перечислены требования, необходимые на хосте, на котором выполняется этот модуль.
- python-pyOpenSSL >= 0.15 (при использовании провайдера
selfsignedилиassertonly) - acme-tiny (при использовании провайдера
acme)
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| acme_accountkey_path | Путь к файлу accountkey для поставщика acme | |
| acme_chain (добавлено в 2.5) | По умолчанию: да | Включить промежуточный сертификат в сгенерированный сертификат |
| acme_challenge_path | Путь к каталогу вызовов ACME, который обслуживается по адресу http://<HOST>:80/.well-known/acme-challenge/
| |
| attributes (добавлено в 2.3) | По умолчанию: None | Атрибуты, которые должен иметь файл или каталог. Для получения поддерживаемых флагов см. страницу справки для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и в выводе lsattr. псевдонимы: attr |
| csr_path | Путь к запросу на подписание сертификата (CSR), используемому для генерации этого сертификата. Это не требуется в режиме assertonly. | |
| extended_key_usage | Поле расширения extended_key_usage должно содержать все эти значения. псевдонимы: extendedKeyUsage | |
| extended_key_usage_strict |
| Если установлено в True, поле расширения extended_key_usage должно содержать только эти значения. псевдонимы: extendedKeyUsage_strict |
| force |
| Сгенерировать сертификат, даже если он уже существует. |
| group | По умолчанию: None | Имя группы, которая должна владеть файлом/каталогом, как в команде chown. |
| has_expired |
| Проверяет, истек ли сертификат/не истек ли он на момент выполнения модуля. |
| invalid_at | Сертификат должен быть недействительным в данный момент времени. Дата и время отформатированы как ASN.1 TIME. | |
| issuer | Ключевые пары, которые должны быть присутствовать в поле имени издателя сертификата. Если нужно указать более одного значения с одним ключом, используйте список в качестве значения. | |
| issuer_strict (добавлено в 2.5) |
| Если установлено в True, поле issuer должно содержать только эти значения. |
| key_usage | Поле расширения key_usage должно содержать все эти значения. псевдонимы: keyUsage | |
| key_usage_strict |
| Если установлено в True, поле расширения key_usage должно содержать только эти значения. псевдонимы: keyUsage_strict |
| mode | По умолчанию: None | Режим файла или каталога. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически представляют собой восьмеричные числа (например, 0644 или 01777). Пропуск ведущего нуля, скорее всего, приведёт к неожиданным результатам. Начиная с версии 1.8, режим может быть указан в символьной форме (например, u+rwx или u=rw,g=r,o=r). |
| not_after | Сертификат должен истечь в данный момент времени. Дата и время отформатированы как ASN.1 TIME. псевдонимы: notAfter | |
| not_before | Сертификат должен начать действовать в данный момент времени. Дата и время отформатированы как ASN.1 TIME. псевдонимы: notBefore | |
| owner | По умолчанию: None | Имя пользователя, который должен владеть файлом/каталогом, как в команде chown. |
| path обязательно | Абсолютный удаленный путь, где должен быть создан или уже находится сгенерированный файл сертификата. | |
| privatekey_passphrase | Пароль к privatekey_path. | |
| privatekey_path | Путь к закрытому ключу, используемому при подписании сертификата. | |
| provider обязательно |
| Имя поставщика для генерации/получения сертификата OpenSSL. Поставщик assertonly не будет генерировать файлы и завершится ошибкой, если файл сертификата отсутствует. |
| selevel | По умолчанию: s0 | Часть уровня SELinux контекста файла. Это атрибут MLS/MCS, иногда называемый range. Функциональность _default, как и для seuser. |
| selfsigned_digest | По умолчанию: sha256 | Алгоритм хеширования, используемый при самоподписании сертификата |
| selfsigned_not_after | Дата и время, после которых сертификат перестаёт быть действительным. Дата и время отформатированы как ASN.1 TIME. Если это значение не указано, сертификат будет недействительным через 10 лет. псевдонимы: selfsigned_notAfter | |
| selfsigned_not_before | Дата и время, с которых сертификат начинает действовать. Дата и время отформатированы как ASN.1 TIME. Если это значение не указано, сертификат начнёт действовать с текущей даты. псевдонимы: selfsigned_notBefore | |
| selfsigned_version (добавлено в 2.5) | По умолчанию: 3 | Версия сертификата selfsigned. В настоящее время она почти всегда должна быть 3. |
| serole | По умолчанию: None | Роль в контексте файла SELinux, функциональность _default работает аналогично seuser. |
| setype | По умолчанию: None | Тип в контексте файла SELinux, функциональность _default работает аналогично seuser. |
| seuser | По умолчанию: None | Пользователь в контексте файла SELinux. По умолчанию используется политика системы, если применимо. Если установлено в _default, будет использоваться часть политики user, если она доступна. |
| signature_algorithms | Список алгоритмов, с которыми вы согласны для подписи сертификата (например, ['sha256WithRSAEncryption', 'sha512WithRSAEncryption']). | |
| state |
| Сертификат должен существовать или нет, выполняя действие, если состояние отличается от указанного. |
| subject | Ключевые пары, которые должны быть присутствовать в поле имени субъекта сертификата. Если нужно указать более одного значения с одним ключом, используйте список в качестве значения. | |
| subject_alt_name | Поле расширения subject_alt_name должно содержать эти значения. псевдонимы: subjectAltName | |
| subject_alt_name_strict |
| Если установлено в True, поле расширения subject_alt_name должно содержать только эти значения. псевдонимы: subjectAltName_strict |
| subject_strict (добавлено в 2.5) |
| Если установлено в True, поле subject должно содержать только эти значения. |
| unsafe_writes (добавлено в 2.2) |
| Обычно этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несогласованные чтения из целевых файлов, но иногда системы настроены или работают таким образом, что это не возможно. Одним из примеров являются файлы, смонтированные в docker; они не могут быть обновлены атомарно и могут быть обновлены только небезопасными методами. Этот булевый параметр позволяет Ansible использовать небезопасные методы обновления файлов в тех случаях, когда нет другого выбора. Имейте в виду, что это подвержено проблемам гонки и может привести к повреждению данных. |
| valid_at | Сертификат должен быть действительным в данный момент времени. Дата и время отформатированы как ASN.1 TIME. | |
| valid_in | Сертификат должен оставаться действительным в течение valid_in секунд с этого момента. | |
| version | Версия сертификата. В настоящее время она почти всегда должна быть 3. |
Примечания
Примечание
- Все значения ASN.1 TIME должны быть указаны в формате YYYYMMDDHHMMSSZ. Дата должна быть указана в UTC. Минуты и секунды обязательны.
Примеры
- 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 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: True
# 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: False
ignore_errors: True
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: False
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: False
- 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
Возвращаемые значения
Общие значения возврата описаны здесь, следующие поля уникальны для данного модуля:
| Ключ | Возвращённое значение | Описание |
|---|---|---|
| filename строка | изменено или успешно | Путь к сгенерированному сертификату Пример: /etc/ssl/crt/www.ansible.com.crt |
Статус
Этот модуль помечен как превью, что означает, что гарантии обратной совместимости интерфейса нет.
Автор
- Янис Гвенане (@Spredzy)
- Маркус Теуфельбергер (@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.5/modules/openssl_certificate_module.html