En el tutorial «express» de hoy voy a mostrar cómo cifrar passwords con Maven de una manera fácil y sencilla para que nunca más tengáis una contraseña en claro en vuestro fichero de configuración de usuario de Maven.
Índice de contenidos
- 1. Introducción
- 2. Entorno
- 3. Cómo crear una master password
- 4. Cómo encriptar contraseñas de servidor
- 5. Cómo mantener la contraseña maestra en una unidad extraíble
- 6. Conclusiones
1. Introducción
Una de las cosas que llama la atención a la hora de usar Maven para desplegar software en repositorios remotos e interactuar directamente con sistemas de control de código fuente es que iremos recopilando una serie de contraseñas cada vez más amplia en la configuración de Maven. Sin un mecanismo para cifrar estas contraseñas, el ~/.m2/settings.xml se convertirá rápidamente en un riesgo de seguridad, ya que contendrá contraseñas de texto sin formato necesarias para acceder a los distintos repositorios de código y comunicarnos con el resto de sistemas configurados.
A partir de la versión 2.1, Maven introduce un mecanismo que facilita el cifrado de contraseñas en la configuración Maven de un usuario (~/.m2/settings.xml). Para ello, primero debemos crear una contraseña maestra y almacenarla en un archivo security-settings.xml en ~/.m2/settings-security.xml. A continuación, podremos utilizar esta contraseña maestra para cifrar contraseñas almacenadas en la configuración de Maven del usuario (~/.m2/settings.xml).
Además de resolver un claro riesgo de seguridad, este mecanismo de cifrado también facilita la compartición de estos archivos de configuración entre los distintos integrantes de un equipo de desarrollo, algo muy habitual.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: portátil MacBook Pro Retina 15′ (2.3 Ghz Intel Core I7, 16GB DDR3).
- Sistema operativo: Mac OS Sierra 10.12.5
- Apache Maven 3.5.0
3. Cómo crear una master password
Abrimos el ‘terminal’ y ejecutamos el siguiente comando:
mvn --encrypt-master-password <password>
donde <password> = contraseña maestra. El comando genera una contraseña con el siguiente aspecto:
{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}
Almacenamos la password en ${user.home}/.m2/settings-security.xml, algo como:
<settingsSecurity> <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master> </settingsSecurity>
Una vez hecho esto, podemos iniciar el cifrado de contraseñas de servidor existentes.
4. Cómo encriptar contraseñas de servidor
Encriptar las passwords para nuestros servidores es tan sencillo como ejecutar el siguiente comando:
mvn --encrypt-password <password>
donde <password> = contraseña servidor. El comando genera una contraseña con el siguiente aspecto:
{COQLCE6DU6GtcS5P=}
Corta y pega esta password en el fichero de configuración ~/.m2/settings.xml en la sección server. Algo como:
<settings> ... <servers> ... <server> <id>my.server</id> <username>foo</username> <password>{COQLCE6DU6GtcS5P=}</password> </server> ... </servers> ... </settings>
5. Cómo mantener la contraseña maestra en una unidad extraíble
Si queremos disponer de todavía más seguridad, podemos crear la contraseña maestra del mismo modo que se describe en los puntos anteriores pero la vamos a almacenar en una unidad extraíble montada como /Volumes/mySecureUsb y almacenamos el siguiente contenido:
<settingsSecurity> <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master> </settingsSecurity>
en el fichero /Volumes/mySecureUsb/secure/settings-security.xml
Ahora creamos/modificamos el fichero ${user.home}/.m2/settings-security.xml con el siguiente contenido:
<settingsSecurity> <relocation>/Volumes/mySecureUsb/secure/settings-security.xml</relocation> </settingsSecurity>
6. Conclusiones
Si ya conocíais este mecanismo de Maven, lo seguiréis usando y, para todos aquellos que no, a partir de ahora no hay ninguna excusa para seguir utilizando nuestras contraseñas de servidor en claro y sin ningún formato en la configuración de Maven para nuestros proyectos.
Espero que os sirva de utilidad. Saludos cordiales.
Hola,
¿Hay alguna manera de ejecutar este proceso que indicas para dos instancias de Maven (3.5.4 y (2.2.1) que se ejecutan en una misma máquina? He intentado crear dos entradas distintas en el fichero settings-security.xml, una para cada contraseña master creada con cada una de las instancias de Maven, y obtengo un error.