Hoy vamos a ver cómo configurar Let’s Encrypt en Nginx en un servidor Ubuntu alojado en DigitalOcean. Antes de nada, aclarar qué es Let’s Encrypt. Let’s Encrypt es una Autoridad de Certificación gratuita, automatizada y abierta, tal cómo dicen en su web. Básicamente, lo que nos provee es una manera muy sencilla y gratis de generar certificados SSL para asegurar nuestras webs y poder acceder por HTTPS. Ahora veremos lo simple que es, tanto la generación del certificado como su mantenimiento que es automático.
Nota: Antes de nada, deberemos tener configurados los Virtual Hosts (bloques server en Nginx) para los dominios que queramos añadirles HTTPS.
Primero, tendremos que instalar Certbot en el servidor. Cerbot es el software que nos generará los certificados y los aplicará, nosotros solamente tendremos que introducir los datos que nos pida el asistente. Para instalarlo, tendremos que ejecutar los siguientes comandos:
1 2 3 |
sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install python-certbot-nginx |
Una vez finalice la instalación, vamos a ejecutar el siguiente comando. Lo que hace este comando es ejecutar el assitente de configuración mencionado anteriormente:
1 |
sudo certbot --nginx |
Nos preguntará por:
- El correo
- Aceptar los términos de servicio (A para aceptar)
- Si quieres compartir el email con Electronic Frontier Foundation para que te envíen correos sobre su trabajo, noticias, etc.
- Seleccionamos el dominio o dominios los cuales queramos añadirle HTTPS
- Generará los certificados y, finalmente, nos preguntará si queremos que redireccione automáticamente de HTTP a HTTPS (si es así, ponemos 2)
Con esto Cerbot, generará y configurará lo necesario para tener tu web segura, lo que pasa es que a lo mejor tendrás que añadir alguna configuración a mano.
Yo, por ejemplo, he tenido que configurar que HTTPS con WWW me redirija al HTTPS sin WWW, pero las demás configuraciones las añade Certbot solo. Esto se añade en la configuración de los Virtual Hosts (bloques server) de Nginx que se encuentra en /etc/nginx/sites-available .
Otra cosa que he tenido que configurar a mano, ha sido el firewall. En mi servidor tengo un firewall y he tenido que añadir una regla para poder entrar desde HTTPS, de no ser así, no podía entrar porque me bloqueaba el acceso. Esta regla lo que hace es abrir tanto el puerto 80 (HTTP) como el 443 (HTTPS) y así ya podía entrar:
1 |
sudo ufw allow 'Nginx Full' |
Finalmente, una vez hecho esto, reinicias nginx:
1 |
sudo service nginx restart |
Y ya se debería poder entrar por HTTPS.
Una de las cosas más interesantes que tiene Let’s Encrypt es que gracias a Cerbot sus certificados se renuevan automáticamente. Cerbot añade un proceso cron para que se actualice cada 3 meses automáticamente, puedes ver el cron instalado por Certbot en cat /etc/cron.d/certbot .
Puedes comprobar que las actualizaciones funcionan correctamente ejecutando:
1 |
sudo certbot renew --dry-run |
Si, en algún caso, quisiéramos actualizarlo manualmente, también podríamos, ejecutando:
1 |
sudo certbot renew |
Más info: https://certbot.eff.org/docs/using.html#renewing-certificates