Cómo crear certificados SSL con Docker para trabajar en entorno local
5 min.
Hoy vamos a utilizar un pequeño proyecto con Docker que nos permite generar certificados SSL autofirmados para poder trabajar sobre HTTPS en local.
Los certificados los vamos a generar para un nombre de dominio real, y vamos a preparar el entorno para WordPress que montamos en el anterior post en el que explicábamos cómo trabajar Wordpess con Docker en localhost, para que funcione con este nuevo dominio bajo HTTPS.
Para conseguirlo vamos a realizar los siguientes pasos:
Clonar un repo y generar el certificado
Instalar el certificado en Chrome
Mapear nuestra IP Local al nuevo dominio
Modificar el archivo de configuración de NGINX
Reemplazar localhost por nuestro dominio en la base de datos de WordPress con WP-CLI
Generando el certificado SSL
Como he dicho antes, para generar el certificado, vamos a utilizar un pequeño proyecto que tengo en Github:
Una vez clonado, accede a la carpeta y compila el proyecto:
cd sslmaker
docker-compose build
Ahora ya puedes generar certificados ejecutando lo siguiente:
docker-compose run sslmaker dockerwp.com
Fíjate que el último parámetro del comando que acabamos de ejecutar es el nombre de dominio para que el queremos el certificado: dockerwp.com
Los certificados se crean dentro del contenedor, en /etc/ssl/certs/ y al estar esa ruta mapeada con nuestra maquina, podemos acceder a ellos para instalarlos en el navegador:
Instalando el certificado en el navegador
El la barra de navegación de tu chrome accede a chrome://settings/security y accede a la gestión de certificados:
En mi caso, al utilizar Mac me abre la app Keychain para gestionarlos, lo que hago es añadir el archivo con la extensión .crt que ha generado sslmaker.
Una vez añadido, cambio su configuración para que el navegador “confie” en este certificado autofirmado:
Mapeando el nuevo dominio con localhost
Bien, ya tenemos el certificado para ese dominio en nuestro navegador, ahora vamos a decirle a nuestro ordenador, que cuando accedamos a https:://dockerwp.com, resuelva la ip de localhost, que es 127.0.0.1
Para ello vamos a añadir una línea al fichero hosts, lo editamos:
sudo vim /etc/hosts
Añadimos lo siguiente al final del archivo y guardamos:
127.0.0.1 dockerwp.com
Añadiendo el certificado y el nuevo dominio a la configuración de Nginx
Es hora de decirle a nuestro contenedor que actúa como servidor web, que vamos a trabajar con un dominio diferente a localhost y bajo HTTPS.
Para conseguirlo, modificamos el archivo de configuración de Nginx, ahora lo tenemos así:
Te describo a continuación los cambios que hemos hecho:
En las líneas 5 y 6 hemos activado el soporte para SSL en Nginx
En la línea 8 le decimos dónde se encuentra la clave pública dentro del contenedor (Este es el fichero que hemos añadido al navegador) y en la línea 9 de decimos dónde queda la clave privada (La clave privada es el otro fichero que nos genera sslmaker)
En la línea 11 cambiamos 127.0.0.1 por el nombre del nuevo dominio que hemos creado
Genial, nos queda copiar los archivos del certificado que hemos generado antes a nuestro proyecto y realizar un par de cambios en la configuración de nuestro docker-compose.
Crea una carpeta nueva en el proyecto para mapear los archivos del certificado de nuestra máquina al contenedor:
mkdir /nginx/ssl
Y coloca una copia de los archivos del certificado en esa carpeta.
Ahora mapeamos en el servicio de Nginx de nuestro docker-compose la carpeta que acabamos de crear con el contenedor:
Date cuenta que en la línea 6 hemos agregado la variable NGINX_HTTPS_PORT con el valor 443
Genial, con esto ya nuestro Nginx puede servir contenido bajo HTTPS para el dominio dockerwp.com.
Para verlo en funcionamiento, edita el archivo index.php de la instalación del WordPress de este proyecto y agrega lo siguiente:
<?php
phpinfo();
die();
Con esto estamos mostrando la información de PHP con phpinfo(); y cortando la ejecución con die(); para que no conecte con la Base de datos ya que aún nos falta reemplazar algunas cadenas para que WordPress funcione por HTTPS.
Ahora accede en tu navegador a https://dockerwp.com, si todo ha ido bien, deberías estar viendo esto:
Cambiando localhost por el nuevo dominio en la base de datos de WordPress
Llegados a este punto, lo único que nos queda es hacer el reemplazo de dominio para que WordPress funcione accediendo a https://dockerwp.com en vez de con http://localhost.
Antes de nada, vuelve a dejar el archivo index.php como estaba, después, desde la raíz de la instalación de WordPress, en la línea de comandos, ejecuta lo siguiente:
Como puedes ver, con WP-CLI reemplazamos todas las cadenas que encuentre con http://localhost:8000 por https://dockerwp.com:
Si todo ha ido como debería, podemos acceder a nuestra instalación de WordPress anterior pero ahora accediendo a https://dockerwp.com:
Conclusión
Como ves, generar certificados autofirmados y utilizarlos en nuestros proyectos con Docker para trabajar en local es algo fácil de realizar siguiendo estos pasos.
En mi caso me resulta muy útil cuando necesito clonar un proyecto desde un entorno de producción a un entorno local, puedes clonar el proyecto entero sin tener que hacer un solo reemplazo en la Base de datos para hacer funcionar en tu máquina de manera local.
Código realizado en el post
Te dejo el enlace al repositorio con el código que hemos utilizado en este post: