Los tiempos en los que era necesario pagar $15 anuales por un certificado SSL han quedado en el pasado. Let’s Encrypt ha estado operando por más de un año de forma exitosa. Se trata de una autoridad de certificados que emite SSLs gratuitos con los mismos niveles de seguridad que un certificado de rango medio.

Se tratan de certificados DV (domain-validated), lo cual significa que la autoridad verifica que tu eres el dueño del nombre de dominio. La gran mayoría de los certificados comerciales también se verifican así, por lo que no hay ninguna razón para comprar un certificado de $15-$20 teniendo Let’s Encrypt disponible.

Hoy veremos como poner Let’s Encrypt en funcionamiento en la distribución Ubuntu, con Nginx como servidor web.

Paso #1 – Instala Cerbot

Primero este comando:

sudo add-apt-repository ppa:certbot/certbot

Luego este:

sudo apt-get update

Y luego este:

sudo apt-get install certbot

Paso #2 – Obtén un certificado

En este paso estamos asumiendo que ya tienes Nginx instalado y corriendo en el servidor. En caso contrario, instala Nginx primero:

sudo apt-get install nginx

Luego vamos a editar un archivo de configuración de Nginx. Abre el archivo con este comando:

sudo nano /etc/nginx/sites-available/default

Y luego añade el siguiente texto al bloque de texto que comienza con «server {«:

        location ~ /.well-known {
                allow all;
        }

Guarda los cambios en nano y sal del editor.

Ejecuta lo siguiente para chequear si hay errores:

sudo nginx -t

Asumiendo que no los haya, reinicia Nginx para hacer los cambios efectivos:

sudo service nginx restart

Ahora estamos listos para pedirle a certbot que genere nuestros certificados. En el siguiente comando reemplaza «dominio.com» con tu nombre de dominio:

certbot certonly --webroot --webroot-path=/usr/share/nginx/html -d dominio.com -d www.dominio.com

La primera vez que utilices certbot, el software te pedirá que ingreses una dirección de email y que aceptes los términos y condiciones.

Verifica que todo ha funcionado ejecutando este comando:

sudo ls -l /etc/letsencrypt/live/dominio.com

Te debería dar una lista de archivos con extensión .pem

Paso #3 – Configura el certificado en el servidor

Vamos a volver a editar la configuración de nginx:

sudo nano /etc/nginx/sites-available/default

Encuentra las siguientes líneas dentro del texto en «server {» y bórralas:

listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

Luego, dentro del mismo bloque de texto, añade estas líneas:

        listen 443 ssl;

        server_name dominio.com www.dominio.com;

        ssl_certificate /etc/letsencrypt/live/dominio.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/dominio.com/privkey.pem;

Como siempre, reemplaza dominio.com con tu dominio.

Después, añade otro bloque de texto afuera del bloque donde estabas editando. Ingresa lo siguiente:

server {
    listen 80;
    server_name dominio.com www.dominio.com;
    return 301 https://$host$request_uri;
}

Nuevamente, verifica que no hay errores de sintaxis con Nginx:

sudo nginx -t

Y luego reinicia el servicio:

sudo service nginx restart

Paso #4 – Configura la auto renovación del certificado

Por default, Let’s Encrypt solamente genera certificados por 90 días. Pero no te preocupes, vamos a configurarlo para que los continúe generando indefinidamente.

Primero este comando:

sudo crontab -e

Y luego copia y pega la siguiente línea al final del texto:

15 3 * * * /usr/bin/certbot renew --quiet --renew-hook "/usr/sbin/service nginx reload"

Guarda los cambios y listo! Ya estás corriendo con un certificado gratuito de Let’s Encrypt.