Índice de contenidos
1. Entorno
Este tutorial está escrito usando el siguiente entorno:
- Hardware: Slimbook Pro 2 13.3″ (Intel Core i7, 32GB RAM)
- Sistema Operativo: LUbuntu 18.04
2. Introducción
En el momento en el que nuestras herramientas de desarrollo las movemos a la nube, quedamos expuestos a cualquiera que acierte con nuestra URL por lo que se hace imprescindible que todo nuestro tráfico vaya a través del protocolo seguro HTTPS y Nexus no puede ser una excepción; más si cabe cuando lo utilizamos como repositorio privado de Docker que te obliga a que las imágenes sean servidas a través de protocolo seguro.
Nota: Para seguir el tutorial es necesario que ya tengas generados certificados válidos en un dominio real, yo lo voy a hacer con los mios de Let’s Encrypt.
3. Vamos al lío
Lo primero que tenemos que hacer es acceder por SSH al servidor donde esté corriendo Nexus y localizar los siguientes paths:
- $install-dir: se trata del directorio donde está instalado nexus, típicamente /opt/nexus pero depende de la instalación que se haya hecho.
- $data-dir: se trata del directorio sonatype-work que suele estar como hermano del anterior.
Hay que tener en cuenta que Nexus se levanta en un servidor Jetty y que lo que vamos a hacer es configurar este servidor para servir HTTPS.
Entonces el primer paso es crear el fichero $install-dir/etc/ssl/keystore.jks que va a contener nuestro certificado. Si contamos con certificados de Let’s Encrypt tendremos que tener los ficheros: fullchain.pem y privkey.pem los cuales vamos a tener que convertir con la herramienta openssl al formato de keystore necesario:
$> openssl pkcs12 -export -out keystore.pkcs12 -in fullchain.pem -inkey privkey.pem
Nota: cuando nos lo pida establemos una contraseña que tendremos que recordar para más adelante.
Ahora importamos el certificado creando el fichero keystore.jks
$> keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.jks
Nota: establecemos la misma contraseña que en la ejecución anterior.
Con esto ya tenemos creado nuestro fichero $install-dir/etc/ssl/keystore.jks que va a ser el que lea Nexus en su arranque.
Ahora vamos a editar el fichero $data-dir/etc/nexus.properties donde vamos a añadir la línea «application-port-ssl=8443» y vamos a descomentar la línea nexus-args para añadir un nuevo valor «${jetty.etc}/jetty-https.xml» de modo que la línea quedaría de esta forma:
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml,${jetty.etc}/jetty-http-redirect-to-https.xml
Guardamos este fichero y editamos el fichero «$install-dir/etc/jetty/jetty-https.xml» donde modificamos los tres puntos en los que se establece la palabra «password» por la contraseña que hayamos puesto anteriormente.
Ahora solo tenemos que reniciar Nexus con el comando:
$> sudo systemctl restart nexus
Para depurar cualquier tipo de error en el arranque lo más útil es mirar el log:
$> tail -1000f $data-dir/nexus3/log/nexus.log
Si todo es correcto podrás acceder a Nexus a través de la URL: https://tudominio.org:8443 y ten en cuenta que cualquier referencia al repositorio ahora solo será válida con esta URL, por lo que tendrás que actualizarla donde se esté utilizando.
4. Conclusiones
Como ves no es complicado tener nuestro repositorio para todo sirviendo el contenido a través de protocolo seguro y dándonos un plus de seguridad en nuestras operaciones en la nube.
Cualquier duda o sugerencia en la zona de comentarios.
Saludos.