Cómo importar certificados a un keystore de Java con Ansible

· 3 min de lectura
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:

keytool-management · master · Ignacio Van Droogenbroeck / Ansible Recipes - Playbooks
En este proyecto encontrarás Playbooks de Ansible que fui fabricando y los que vimos en la serie de post #AnsibleEssentials en www.cduser.com

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.


baehost