libre_ops.ca_keys
Claves de la Autoridad Certificadora
Este es un rol de Ansible para generar claves privadas de CA (Autoridad Certificadora) y certificados firmados. Estos pueden ser utilizados para asegurar aplicaciones de servidor/cliente, donde se requiere tanto la encriptación de datos en tránsito como la autenticación entre nodos.
Cuando está configurado correctamente, las claves firmadas por una CA privada pueden prevenir ataques MITM (hombre en el medio) y pueden usarse para autenticación bidireccional. Un ejemplo podría ser asegurar las conexiones entre nodos en un clúster de Kafka o Elastic Stack.
El rol sigue estos pasos básicos:
- Generar un par de claves de CA (Autoridad Certificadora)
- Generar claves y CSR (Solicitudes de Firma de Certificado) para nodos especificados
- Firmar las CSR utilizando la CA, para crear certificados firmados (CRT)
- Opcionalmente, empaquetar las claves necesarias en binarios de keystore/truststore de Java
Valores por defecto
Consulta todos los valores por defecto aquí y sobreescríbelos según sea necesario.
Uso
Uso recomendado: ejecuta el rol en un playbook local (ver abajo), luego mueve los archivos generados a un lugar seguro. No dejes las claves a la vista. Este código se proporciona tal cual, cómo lo uses y almacenes las claves resultantes es tu responsabilidad.
Este rol puede usarse para crear nuevas claves y CRT a partir de un certificado CA existente si hay alguno presente.
Después de que se crean, mueve los archivos requeridos al proyecto en el que los estás usando. Puedes utilizar Ansible Vault para encriptar los archivos (incluyendo los binarios jks), y módulos de Ansible como copy
los desencriptarán durante la subida si se les proporciona la contraseña del vault.
Verificación de las claves
Puedes (y debes) verificar las claves con varios comandos de openssl
. Aquí hay algunos ejemplos:
openssl x509 -in generated_keys/ca.crt -text -noout
openssl rsa -in generated_keys/<nombre-de-la-clave>.key -check
openssl x509 -in generated_keys/<nombre-de-la-clave>.crt -text -noout
Limitación de Python
Debido a un error en Ansible (la corrección ya ha sido fusionada en la rama 'devel'), debes usar Python 2.7 al ejecutar las tareas para crear keystores de Java. Consulta este problema para más detalles.
Ejemplo de playbook
- name: Generar Claves
hosts: 127.0.0.1
connection: local
vars:
ansible_python_interpreter: '/usr/bin/python2.7'
roles:
- role: libre_ops.ca_keys
vars:
cert_organisation: Ejemplo Inc.
cert_unit: Departamento de Claves
cert_country: FR
cert_state: París
cert_location: París
create_keys:
- filename: servidor
subject:
- "/CN=app.client.org"
- "/O={{ cert_organisation }}"
- "/OU={{ cert_unit }}"
- "/C={{ cert_country }}"
- "/ST={{ cert_state }}"
- "/L={{ cert_location }}"
- filename: cliente
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