ca_keys
Ключи удостоверяющего центра (CA)
Это роль Ansible для генерации приватных ключей CA и подписанных сертификатов. Их можно использовать для защиты приложений серверов/клиентов, где требуется как шифрование данных при передаче, так и аутентификация между узлами.
При правильной настройке ключи, подписанные частным CA, могут предотвратить атаки типа "человек посередине" (MITM) и могут быть использованы для двусторонней аутентификации. Например, можно защитить соединения между узлами в кластере Kafka или Elastic Stack.
Роль выполняет следующие основные шаги:
- Генерация пары ключей CA (удостоверяющий центр)
- Генерация ключей и CSR (заявок на подпись сертификата) для указанных узлов
- Подписание CSR с использованием CA для создания подписанных сертификатов (CRT)
- Опционально упаковка необходимых ключей в бинарные файлы java keystore/truststore
По умолчанию
Посмотрите все настройки по умолчанию здесь и измените их по мере необходимости.
Использование
Рекомендуемое использование: запустите роль в локальном плейбуке (см. ниже), затем переместите сгенерированные файлы в безопасное место. Не оставляйте ключи без присмотра. Этот код предоставляется как есть, и как вы его используете и храните полученные ключи — это ваша ответственность!
Эта роль может быть использована для создания новых ключей и CRT из существующего сертификата CA, если он присутствует.
После их создания переместите необходимые файлы в проект, в котором вы их используете. Вы можете использовать
Ansible Vault для шифрования файлов (включая бинарные файлы jks), а модули Ansible, такие как copy
, будут расшифровывать их во время загрузки, если вы предоставили пароль от хранилища.
Проверка ключей
Вы можете (и должны) проверять ключи с помощью различных команд openssl
. Вот некоторые примеры:
openssl x509 -in generated_keys/ca.crt -text -noout
openssl rsa -in generated_keys/<key-name>.key -check
openssl x509 -in generated_keys/<key-name>.crt -text -noout
Ограничения Python
Из-за ошибки Ansible (исправление сейчас включено в ветку devel
) вам нужно использовать Python 2.7 при выполнении задач по созданию java keystores. Подробности смотрите в этой проблеме.
Пример плейбука
- name: Генерация ключей
hosts: 127.0.0.1
connection: local
vars:
ansible_python_interpreter: '/usr/bin/python2.7'
roles:
- role: libre_ops.ca_keys
vars:
cert_organisation: Example Inc.
cert_unit: Отдел ключей
cert_country: FR
cert_state: Париж
cert_location: Париж
create_keys:
- filename: server
subject:
- "/CN=app.client.org"
- "/O={{ cert_organisation }}"
- "/OU={{ cert_unit }}"
- "/C={{ cert_country }}"
- "/ST={{ cert_state }}"
- "/L={{ cert_location }}"
- filename: client
subject:
- "/CN=app.server.org"
- "/O={{ cert_organisation }}"
- "/OU={{ cert_unit }}"
- "/C={{ cert_country }}"
- "/ST={{ cert_state }}"
- "/L={{ cert_location }}"
Generate private CA keys and signed certificates
ansible-galaxy install libre-ops/ca_keys