Certificado SSL para host Nginx en Debian

En los días de hoy, poseer un certificado HTTPS tiene un valor más allá del meramente estético. Si bien hasta ahora tenerlo ameritaba la confianza de los usuarios, especialmente si estos introducen datos privados en nuestro sitio, a partir de septiembre de este año tendrá todavía más provecho, ya que Google señalará con advertencias más agresivas a los sitios que no lo posean (hasta ahora únicamente venía dando prioridad a los sitios con SSL frente a los HTTP).

El proceso de obtención de un certificado Let’s Encrypt comienza instalando el programa Certbot. Para ello, debemos descomentar o añadir los siguientes repositorios en /etc/apt/sources.list:

deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free

A continuación, actualizamos la lista de los repositorios habilitados, descargamos las nuevas versiones e instalamos el programa con el que automatizaremos la implementación del certificado:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-certbot-nginx -t stretch-backports

Por si acaso, nos aseguramos de que nuestro firewall por defecto permite el tráfico en los puertos :80 y :443.

iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT

Hecho esto, ya deberíamos poder obtener nuestro certificado sin errores. Para ello, introducimos el siguiente comando, adaptándolo a nuestro dominio (con y sin www):

sudo certbot –nginx -d nuestrositio.com -d www.nuestrositio.com

Durante la instalación del certificado se nos pedirá que escojamos qué tipo de instalación queremos hacer: si únicamente generar el certificado (opción 1) o, además de generarlo, implementarlo automaticamente en el host de Nginx (opción 2). Si escogemos la opción 1, para activar el certificado en nuestro dominio debemos añadir los parámetros necesarios de forma manual en el archivo /etc/nginx/sites-enabled/nuestrositio.com.conf.

Output
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):

Una vez realizados estos pasos sólo queda recargar la configuración de Nginx (systemctl reload nginx) y ya podremos observar en el navegador el indicador que muestra que nuestra conexión es segura.

Los certificados de Let’s Encrypt son válidos durante noventa días. Transcurridos tres meses, podremos renovar automáticamente el certificado de forma sencilla introduciendo el siguiente comando:

sudo certbot renew –dry-run