Activar https con Let’s Encrypt

Tiempo de lectura: 4 min

Let’s Encrypt es un proveedor gratuito de certificados TLS/SSL que nos brinda la posibilidad de activar https en nuestro servidor para nuestros dominios. El proceso está automatizado tanto para Apache como Nginx, en mi caso voy a utilizar Cerbot para instalarlo en mi servidor Nginx.

Certbot es un software que es actualizado bastante a menudo por sus desarrolladores. Si queremos disfrutar de la versión más actualizada, deberemos añadir su repositorio ya que si tiramos de los de Ubuntu, lo más normal es que tengan versiones más antiguas. Para ello:

sudo add-apt-repository ppa:certbot/certbot

Aceptaremos las condiciones del servicio para poder actualizar los repositorios del sistema operativo.

sudo apt-get update

Y finalmente instalaremos Certbot.

sudo apt-get install python-certbot-nginx

Certbot ya está listo, ahora simplemente comprobaremos que tenemos definido en nuestro fichero de configuración de Nginx la clave server_name con el dominio que vamos a utilizar.

Veremos la configuración del servidor por defecto en el fichero default, o si está en otro dominio configurado, iremos a ese fichero.

sudo nano /etc/nginx/sites-available/default
server_name example.com www.example.com;

Si ya está configurado, no es necesario hacer nada. En caso contrario añadimos nuestro dominio y ejecutamos los siguientes comandos para comprobar que la configuración de Nginx introducida no da problemas, y si es así recargamos para refrescar la nueva configuración:

sudo nginx -t
    sudo systemctl reload nginx

Por último antes de obtener el certificado, vamos a añadir en nuestro firewall ufw que permita el trafico https. Para ello podemos ejecutar los siguientes comandos para añadir el perfil Nginx full, que incorpora tanto http como https y eliminaremos el http que sobra una vez añadido el anterior:

sudo ufw allow 'Nginx Full'
    sudo ufw delete allow 'Nginx HTTP'

Comprobamos:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Finalmente lanzaremos el proceso para obtener el certificado y que se renueve automáticamente.

sudo certbot --nginx -d example.com -d www.example.com

Se nos pedirá una dirección de correo electrónico y, si todo va bien, nos saldrá una pregunta solicitándonos elegir entre si queremos redireccionar el tráfico http a https o no. Elegimos la deseada, en mi caso elegí la segunda y pulsamos enter.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2017-10-23. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again with the
   "certonly" option. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

De esta manera ya se han descargado e instalado los certificados para el dominio, puedes ir al navegador e introducir el dominio para comprobar si se ha actualizado el indicador de seguridad.

Si no todo fue correctamente y has obtenido un error como el siguiente:

Error: duplicate listen options for [::]:443

Hay una solución, que consiste en abrir el fichero de configuración de Nginx para el dominio y eliminar listen [::]:80 pero dejando listen 80;

Al volver a ejecutar de nuevo y eligiendo la opción de reinstalar los certificados debería de funcionar. Los certificados son válidos durante 90 días, certbot se encarga de lanzar un proceso que comprueba automáticamente 2 veces por día si quedan menos de 30 días para la expiración, de ser así los certificados serán renovados. Podemos comprobar que todo funciona correctamente ejecutando:

bashsudo certbot renew --dry-run

Puedes comprobar en el directorio /etc/cron.d que hay un script llamado certbot que se encarga de ello. Referencias interesantes:

Ya puedes disfrutar de conexión https para tu dominio.