Cómo importar certificados a un keystore de Java con Ansible
En este artículo, te muestro un playbook muy sencillo de Ansible, que te permitirá manipular certificados de un keystore de Java.
Uno de las cosas de todos los días, que hacemos siempre en el trabajo es importar y exportar certificados desde y hacia uno o varios keystore de Jboss. Esto, hasta ahora, era un proceso manual y si bien, en esta etapa este playbook solo soporta el reemplazo de certificados, seguramente, haré una segunda parte de este artículo contemplando también la exportación.
Antes que nada, acá esta el enlace al playbook:
Lo primero que vamos a hacer es cambiar los hosts por nuestro/s servidores con los que debemos interactuar. Acá no hay mucho secreto. La sintaxis es la siguiente:
[hosts]
1.1.1.1 #Esta IP debemos cambiarla por la de nuestro servidor o su FQDN completo.
Luego, tenemos el archivo vars.yml. Este mismo es clave, ya que, acá ajustaremos la configuración de nuestro playbook con los datos que necesitamos. Para publicarlo, lo dejé así:
La variable "certificado_local" va a indicar donde tenemos guardado el certificado. "certificado_remoto" el nombre del certificado en el servidor cuando el Ansible lo envíe (ya lo vamos a ver en el Playbook más adelante) la contraseña del Keystore, también la vamos a pasar como variable y por último, la variable "alias" la usaremos para indicar que alias del keystore queremos manipular.
---
certificado_local: "/Users/nacho/Downloads/certificado.crt"
certificado_remoto: "certificado.crt"
storepass: "123456"
alias: "tu-alias"
Veamos el Playbook.
##################################################
# Playbook para el borrado e importación de certificados en los keystore de Java by Ignacio Van Droogenbroeck @hectorivand // www.cduser.com
## No modificar este playbook, completas las variables desde vars/default.yml ##
##################################################
---
- hosts: all
#become: true
vars_files:
- vars.yml
tasks:
- name: Copiar certificados desde local a los servidores
template:
src: "{{certificado_local}}"
dest: "/tmp/"
- name: Borrar certificados del Keystore.
shell: keytool -delete -alias {{alias}} -storepass {{ storepass }} -noprompt -keystore /opt/jboss/domain/configuration/claves/local/keystore-ePagos.jks
- name: Importar nuevo certificado
shell: keytool -import -alias {{alias}} -storepass {{ storepass }} -noprompt -keystore /opt/jboss/domain/configuration/claves/local/keystore-ePagos.jks -file /tmp/{{ certificado_remoto }}
Fijense que es muy sencillo, no hace nada extravagante más que copiar el certificado desde nuestra maquina hacia el /tmp/ de el/los equipos remotos, así como también la manipulación del comando keytool.
Noten también que esta invocando las variables que especificamos en el archivo "vars.yaml" y también, miren que hay un argumento que es "-noprompt", esto es clave para que Ansible siga trabajando sin ningún pedido de confirmación. Si esto no está, el proceso se va a colgar.
Por último, cuando terminemos de retocar, corremos y dejamos que Ansible haga su magia:
ansible-playbook -i hosts playbook.yml
Para ir cerrando
Como ven, es algo muy sencillo, hay un modulo para Ansible que trabaja con Keystores de Java, sinceramente lo ví muy por arriba y el manejo a nivel de alias para importación no lo hacia, lo hacia por el "common name" del certificado.
Seguramente hay otras maneras de hacerlo, pero así funciona bastante bien y lo mantengo sencillo. "Quédense en la vuelta" para la versión 2 de este Playbook donde seguramente cubriré la exportación.