Let’s Encrypt con Nginx en Raspberry Pi (Raspbian)

ACTUALIZADO 21/09/2020. Parece ser que Certbot ya no está disponible para Debian 8 Jessie, ya no aparece en el desplegable de la web oficial para su descarga. Tampoco está disponible el repositorio que agregamos manualmente para la instalación del software, por lo que solo será compatible con versiones de Debian superiores a la 9, inclusive, en donde figura este software dentro de los repositorios oficiales.


Uno de los problemas a los que se deben de enfrentar todas aquellas personas con un servicio web sin cifrar, corriendo bajo el protocolo HTTP y con datos que no deben de ser transmitidos en texto plano, es el de habilitar el protocolo seguro HTTPS. Es más, ahora todas las páginas web, ya sean estáticas o no, van a tener que correr bajo el protocolo seguro tras la decisión que Google va a aplicar sobre su navegador Chrome y la clasificación de las webs sin HTTPS.

El mayor inconveniente era encontrar una entidad certificadora que emitiera certificados baratos, para su uso en servicios web domésticos, como un almacenamiento en la nube o un servidor de correo con acceso web desde un equipo instalado en tu propia casa. En estos casos gastar una media de 100€ en un certificado no compensa para este escenario, y dar con certificados baratos no es tarea fácil. De momento para este blog, y para otros servicios web alojados en el salón de mi casa, se están usando los certificados de Comodo adquiridos a través de Namecheap (web oficial pincha aquí) los cuales ofrecen un certificado SSL/TLS por 6€ al año. Pero este escenario va a cambiar con la llegada de Let’s Encrypt.

Hace algo más de un año intenté instalar esta entidad en un servidor para poder gestionar este tipo de certificados, pero tras varias horas de pelearme con errores, dependencias imposibles y desesperación decidí abortar la misión. Hoy en día ya no es necesaria tanta complejidad, siendo una tarea tremendamente sencilla.

Vamos al lio!!!


¿Qué es Let’s Encrypt?

Let’s Encrypt, según su web oficial, es una autoridad certificadora gratuita, automatizada y abierta, destinada para el beneficio público, ofrecido por el Internet Security Research Group (ISRG), creada en mayo del 2013 como hogar de proyectos de infraestructura digital para el beneficio público, cuyo fin es reducir las barreras económicas, tecnológicas y educacionales para securizar las comunicaciones a través de Internet.

Entre sus sponsors están Mozilla, the Electronic Frontier Foundation, the University of Michigan, Cisco y Akamai. Casi «na» !!!

Les dan a las personas certificados digitales que necesitan para habilitar HTTPS completamente gratuitos, de la manera más sencilla para el usuario que les es posible. Hacen esto con el único fin de crear una web más segura y respetuosa con la privacidad.

Sus claves:

  • Gratuito.
  • Automático.
  • Seguro.
  • Transparente.
  • Abierto.
  • Cooperativo.

Sus certificados tienen una vigencia de 3 meses, por este motivo tendremos que renovarlo varias veces al año, aunque para ello disponemos de un sencillo comando que configuraremos en el crontab del sistema, como veremos más adelante.

Si quieres conocer más sobre esta autoridad certificadora puedes acceder a su web oficial pinchando aquí.


Escenario

IMPORTANTE, para versiones anteriores a Debian 9 ya no es compatible.

Vamos a instalar el software necesario para gestionar estos certificados en una Raspberri Pi modelo 2B con el sistema operativo Raspbian, aunque es extensible a los modelos 3.

Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 8.0 (jessie)
Release:	8.0
Codename:	jessie

Para ello haremos uso del certbot que es el programa que se comunica con la plataforma de Let’s Encrypt para gestionar los certificados, para su creación/instalación/renovación/revocación.

El servidor web que vamos a utilizar en esta entrada es Nginx, aunque se puede utilizar cualquier otro. Sin embargo Nginx y Apache son compatibles con Certbot para automatizar las configuraciones necesarias en la redirección de los protocolos HPPT -> HTTPS:

nginx version: nginx/1.6.2

Requisitos

Debemos de disponer de los siguientes elementos para poder gestionar estos certificados:

  • Servidor web, stand alone o compartido (webroot).
  • Dominio público, que debe de apuntar a la IP del servidor.
  • IP fija o un servicio DNS para direccionamiento dinámico, como DynDNS (pincha aquí).
  • Conexión al puerto 80 del servidor web desde el exterior.
  • Conexión al puerto 443 para levantar el servicio una vez instalado el certificado.
  • NO tener un certificado instalado previamente para el dominio que vamos a utilizar.

El servidor web puede ser stand alone con un único dominio, o compartido con distintos Virtual Hosts configurados.


Instalación del programa

Vamos a proceder con los pasos necesarios para su instalación.

Agregar repositorio

IMPORTANTE, para versiones anteriores a Debian 9 ya no es compatible.

Si usas la última versión de Raspbian con Stretch puedes saltar al apartado de instalación pinchando aquí, ya que el paquete que vamos a instalar se encuentra entre los repositorios de esta versión.

Si usas la versión Jessie, como es nuestro caso, debemos de agregar el repositorio necesario antes de instalar el paquete. Cuidado!!!, este repositorio al no estar incluido en nuestra versión actual puede contener software que no ha sido testado.

Editamos el archivo sources.list:

sudo vim /etc/apt/sources.list

Agregamos la siguiente línea y guardamos:

deb http://ftp.debian.org/debian jessie-backports main

 

Claves públicas (opcional)

Podemos agregar las claves públicas del repositorio agregado, aunque yo en un principio no lo hice y no pasó nada. Sin embargo, si queremos estar seguros de lo que vamos a instalar desde este repositorio es recomendable descargarse las claves con los siguientes comandos:

gpg --keyserver pgpkeys.mit.edu --recv-key  8B48AD6246925553
gpg -a --export 8B48AD6246925553 | sudo apt-key add -
gpg --keyserver pgpkeys.mit.edu --recv-key  7638D0442B90D010
gpg -a --export 7638D0442B90D010 | sudo apt-key add -

 

Actualizar el listado de paquetes

Una vez cargado el respositorio actualizamos el listado de los paquetes disponibles.

sudo apt-get update

 

Instalar Certbot

Instalamos el software Certbot de Let’s Encrypt:

sudo apt-get install certbot

Confirmamos la versión instalada:

$ certbot --version
certbot 0.10.2

Comprobamos que no existen certificados disponibles en estos momentos:

$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
No certs found.
-------------------------------------------------------------------------------

Instalación del certificado

Disponemos de dos métodos de instalación, la integrada (framework para Apache o Nginx) y la manual.

Instalación integrada

Ahora podemos configurar el entorno para ser usado con Nginx, también disponible para Apache, o podemos usarlo tal cual se ha instalado. Esto es debido a que si lo configuramos para cualquiera de estos servidores web el mismo programa nos ofrece la opción de configurar las redirecciones HTTP->HTTPS de manera automática sin que tengamos que hacer nosotros nada. En esta entrada vamos a realizar una instalación manual.

De todas formas, si quieres investigar y probar este plugin aquí te dejo los pasos para su instalación.

Existen varios paquetes para integrar Certbot con Nginx y Apache:

$ sudo apt-cache search certbot
certbot - automatically configure HTTPS using Let's Encrypt
letsencrypt - transitional dummy package
python-certbot - main library for certbot
python-certbot-doc - client documentation for certbot
python-certbot-apache - Apache plugin for Certbot
python-certbot-apache-doc - Apache plugin documentation for Certbot
python-certbot-nginx - Nginx plugin for Certbot
python-certbot-nginx-doc - Nginx plugin documentation for Certbot

En nuestro caso instalamos el plugin para nuestro servidor web:

sudo apt-get install python-certbot-nginx

Se instalan los paquetes  python-certbot-nginx, python-pyparsing.

Y ahora configuramos el paquete para nuestro servidor web sin indicar los dominios en el comando, lo que nos obliga a contestar ciertas preguntas sobre los dominios instalados e identificados en el servidor:

$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: tiraquelibras.com
2: www.tiraquelibras.com
3: yeloquehay.com
4: correu.yeloquehay.com
5: www.yeloquehay.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
...

O indicamos los dominios en el mismo comando:

$ sudo certbot --nginx -d yeloquehay.com -d www.yeloquehay.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
...

Llegará un punto en el que nos pregunta si queremos que Certbot configure las redirecciones al puerto seguro a nivel de servidor web, añadiendo las líneas de código necesarias automáticamente.

Llegado a este punto tendríamos el certificado instalado y configurado  para el o los dominios solicitados, no siendo necesario seguir con el resto de pasos de esta entrada.

 

Instalación manual

Para la instalación manual podemos indicar que el servidor web es stand alone, o lo que es lo mismo con un único dominio configurado, o compartido, con varios Virtual Servers configurados, que es nuestro caso. Vamos a iniciar la instalación para el dominio yeloquehay.com y su subdominio con www.

Stand alone:

sudo certbot --standalone -d yeloquehay.com -d www.yeloquehay.com

Webroot (compartido), este es nuestro escenario. Tenemos que indicar el Document Root en donde se encuentra alojada la web del dominio que vamos a indicar:

sudo certbot certonly --webroot -w /media/raid/data/yeloquehay.com/www/ -d yeloquehay.com -d www.yeloquehay.com

Estos son los pasos que va ejecutando el programa:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for yeloquehay.com
http-01 challenge for www.yeloquehay.com
Using the webroot path /media/raid/data/yeloquehay.com/www for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0003_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0003_csr-certbot.pem

IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at  /etc/letsencrypt/live/yeloquehay.com/fullchain.pem. Your cert will expire on 2019-05-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew".
 - 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

Ahora podremos crear la redirección HTTP -> HTTPS indicando los archivos del certificado, teniendo en cuenta su fecha de expiración:

  • Archivo Cert -> /etc/letsencrypt/live/yeloquehay.com/fullchain.pem
  • Archivo Key -> /etc/letsencrypt/live/yeloquehay.com/privkey.pem
  • Fecha de expiración del archivo Cert -> Your cert will expire on 2019-05-18

Contenido del archivo VirtualHost con la redirección, yeloquehay.conf, ojo con la configuración PHP que tengas en tu servidor ya que yo tengo dos versiones distintas instaladas, pero para este VirtualHost uso PHP5. Configura este apartado según las preferencias de tu sevidor:

server {
        listen 80;
        server_name www.yeloquehay.com yeloquehay.com;
        return 301 https://$server_name$request_uri; #forzar a https;
}

server {
        listen 443 ssl;
        server_name www.yeloquehay.com yeloquehay.com; 
        root /media/raid/data/yeloquehay.com/www;
        index index.html index.htm index.php;

        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
           root /media/raid/data/yeloquehay.com/www;
        }

        error_log /media/raid/data/yeloquehay.com/logs/error.log error;
        access_log /media/raid/data/yeloquehay.com/logs/access.log;

        client_max_body_size 10G; # set max upload size
        fastcgi_buffers 64 4k;

        # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
        add_header Strict-Transport-Security max-age=15768000;

        ssl on;
        ssl_certificate /etc/letsencrypt/live/yeloquehay.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yeloquehay.com/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1.1 TLSv1.2; # omit SSLv3 because of POODLE (CVE-2014-3566)
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_cache   shared:SSL:5m;
        ssl_prefer_server_ciphers on;

    location / {
        index index.html index.php;
        allow all;
    }


    # MODIFICA SEGUN TU VERSION DE PHP

    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        # fastcgi_param HTTPS on;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        #fastcgi_pass php-handler;
        fastcgi_index index.php; # si fallara quitar esta linea
        fastcgi_read_timeout 600;
    }



}

Recordar reiniciar el servicio del servidor web:

sudo service nginx restart

Revisar cualquier error que os pueda dar el reinicio, ya que alguno de los pasos previos no está bien ejecutado.

Ahora el certificado que se muestra al acceder a la URL es el de Let’s Encrypt:

Comprobamos el estado de los certificados instalados:

$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: yeloquehay.com
    Domains: yeloquehay.com www.yeloquehay.com
    Expiry Date: 2019-05-18 12:08:42+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/yeloquehay.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/yeloquehay.com/privkey.pem
-------------------------------------------------------------------------------

Actualización de los certificados

Podemos actualizar un certificado concreto o todos los instalados con Let’s Encrypt. Para ello usamos comandos distintos.

Dominio concreto – manual

Para actualizar el certificado de un dominio en concreto debemos indicar los siguientes datos:

  • El dominio dentro del listado de certificados instalados disponibles.
  • Si el servidor web es standalone o webroot.
  • Si mantenemos los archivos existentes o renovamos y sobrescribimos estos.
  • Como nuestro caso es compartido debemos de indicar el nuevo webroot, o path en donde se encuentra la aplicación web instalada.

Renovar y mantener archivos existentes

Estos son los pasos para el caso de mantener los archivos existentes:

$ sudo certbot certonly -d yeloquehay.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Place files in webroot directory (webroot)
2: Spin up a temporary webserver (standalone)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for yeloquehay.com

Select the webroot for yeloquehay.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel): 1
Input the webroot for yeloquehay.com: (Enter 'c' to cancel):/media/raid/data/yeloquehay.com/www
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0005_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0005_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/yeloquehay.com-0001/fullchain.pem. Your cert
   will expire on 2019-05-19. To obtain a new or tweaked version of
   this certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - 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

Se genera un nuevo directorio para los certificados del dominio, manteniendo los existentes:

$ sudo ls -altr /etc/letsencrypt/live/
total 16
drwxr-xr-x 8 root root 4096 feb 17 13:24 ..
drwxr-xr-x 2 root root 4096 feb 18 14:04 yeloquehay.com
drwx------ 4 root root 4096 feb 18 15:43 .
drwxr-xr-x 2 root root 4096 feb 18 15:52 yeloquehay.com-0001

Renovar y sobrescribir archivos existentes

Estos son los pasos si escogemos renovar y sobrescribir los archivos existentes:

$ sudo certbot certonly -d yeloquehay.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Place files in webroot directory (webroot)
2: Spin up a temporary webserver (standalone)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Cert not yet due for renewal

You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/yeloquehay.com-0001.conf)

What would you like to do?
-------------------------------------------------------------------------------
1: Keep the existing certificate for now
2: Renew & replace the cert (limit ~5 per 7 days)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for yeloquehay.com

Select the webroot for yeloquehay.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel): 1
Input the webroot for yeloquehay.com: (Enter 'c' to cancel):/media/raid/data/yeloquehay.com/www
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0006_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0006_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/yeloquehay.com-0001/fullchain.pem. Your cert
   will expire on 2019-05-19. To obtain a new or tweaked version of
   this certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - 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

No se genera un directorio nuevo, sino que se actualizan en el directorio actual:

$ sudo ls -altr /etc/letsencrypt/live
total 16
drwxr-xr-x 8 root root 4096 feb 17 13:24 ..
drwxr-xr-x 2 root root 4096 feb 18 14:04 yeloquehay.com
drwx------ 4 root root 4096 feb 18 15:43 .
drwxr-xr-x 2 root root 4096 feb 18 15:55 yeloquehay.com-0001

 

Todos los dominios – manual y programado

Otra forma de actualizar los certificados es dejando que el mismo programa decida que tiene que actualizar y que no, dependiendo de su fecha de caducidad.

Si se encuentra entre los 7 ~ 5 días previos a su fecha de caducidad este pasará a estado disponible de renovar. De lo contrario no hará nada.

Manual

El comando que usaremos para renovar todos los certificados es el siguiente:

 $ sudo certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/yeloquehay.com-0001.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/yeloquehay.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/yeloquehay.com-0001/fullchain.pem (skipped)
  /etc/letsencrypt/live/yeloquehay.com/fullchain.pem (skipped)
No renewals were attempted.

Programado

Podemos automatizar la renovación de los certificados instalados con Let’s Encrypt en el servidor programando una tarea del crontab en el propio sistema.

Como la renovación de un certificado requiere el reinicio del servidor web haremos uso de las funciones pre-hook y post-hook para ejecutar comandos del sistema antes y después de la tarea ejecutada, o renew-hook para ejeuctar el comando tras la tarea de renovación en concreto.

Ejecución diaria a las 2:30 am, desde el usuario root:

$ crontab -e
30 2 * * * /usr/bin/certbot renew --renew-hook "service nginx reload"

Actualización sin aplicar cambios – test

También podemos comprobar el resultado de ejecutar una renovación de todos los certificados sin generar ni aplicar archivo alguno. De esta manera podemos identificar problemas a la hora de ejecutar la renovación de manera controlada.

 $ sudo certbot renew --renew-hook "sudo service nginx reload" --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/yeloquehay.com-0001.conf
-------------------------------------------------------------------------------
Cert not due for renewal, but simulating renewal for dry run
Starting new HTTPS connection (1): acme-staging.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for yeloquehay.com
http-01 challenge for www.yeloquehay.com
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0016_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0016_csr-certbot.pem
Dry run: skipping renewal hook command: sudo service nginx reload
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/yeloquehay.com-0001/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)

Revocar un certificado

Al revocar un certificado Let’s Encrypt lo publicará a través del OCSP (Online Certificate Status Protocol), el cual es consultado por algunos navegadores para identificar si el certificado es de confianza o no. Esto puede darse cuando por error compartimos las claves privadas de manera  pública, por ejemplo. Documentación oficial pincha aquí.

$ sudo certbot revoke --cert-path /etc/letsencrypt/live/yeloquehay.com/fullchain.pemSaving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

-------------------------------------------------------------------------------
Congratulations! You have successfully revoked the certificate that was located
at /etc/letsencrypt/live/yeloquehay.com/fullchain.pem

-------------------------------------------------------------------------------

Eliminar un certificado

Para eliminar un certificado de los cargados en nuestro servidor con Certbot ejecutamos el siguiente comando, indicando del listado cual queremos borrar.

$ sudo certbot delete
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which certificate would you like to delete?
-------------------------------------------------------------------------------
1: yeloquehay.com
2: yeloquehay.com-0001
-------------------------------------------------------------------------------
Press 1 [enter] to confirm the selection (press 'c' to cancel): 1

-------------------------------------------------------------------------------
Deleted all files relating to certificate yeloquehay.com.
-------------------------------------------------------------------------------

Este quedaría eliminado:

$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: yeloquehay.com-0001
    Domains: yeloquehay.com www.yeloquehay.com
    Expiry Date: 2019-05-19 14:52:09+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/yeloquehay.com-0001/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/yeloquehay.com-0001/privkey.pem
-------------------------------------------------------------------------------

Tareas de limpieza

Cuando generamos un certificado o renovamos uno existente se generan ciertos archivos necesarios para obtener el certificado final. Estos son los archivos .csr y .key, los cuales se almacenan en los directorios /etc/letsencrypt/csr//etc/letsencrypt/keys/.

$ ls /etc/letsencrypt/csr/
0000_csr-certbot.pem  0004_csr-certbot.pem  0008_csr-certbot.pem  0012_csr-certbot.pem  0016_csr-certbot.pem
0001_csr-certbot.pem  0005_csr-certbot.pem  0009_csr-certbot.pem  0013_csr-certbot.pem
0002_csr-certbot.pem  0006_csr-certbot.pem  0010_csr-certbot.pem  0014_csr-certbot.pem
0003_csr-certbot.pem  0007_csr-certbot.pem  0011_csr-certbot.pem  0015_csr-certbot.pem

$ ls /etc/letsencrypt/keys/
0000_key-certbot.pem  0004_key-certbot.pem  0008_key-certbot.pem  0012_key-certbot.pem  0016_key-certbot.pem
0001_key-certbot.pem  0005_key-certbot.pem  0009_key-certbot.pem  0013_key-certbot.pem
0002_key-certbot.pem  0006_key-certbot.pem  0010_key-certbot.pem  0014_key-certbot.pem
0003_key-certbot.pem  0007_key-certbot.pem  0011_key-certbot.pem  0015_key-certbot.pem

Es buena práctica borrarlos cada cierto tiempo.

 

Borrado manual

Los podemos borrar a mano.

rm -rf /etc/letsencrypt/csr/*
rm -rf /etc/letsencrypt/keys/*

service nginx reload

 

Borrado programado

O desde el crontab del usuario root.

30 3 * * * /bin/rm -rf /etc/letsencrypt/csr/* && /bin/rm -rf /etc/letsencrypt/keys/*

Comprobar validez del certificado

Una vez instalado el certificado podemos comprobar su validez con alguna herramienta online, como el test de Qualys desde la URL https://www.ssllabs.com/ssltest/analyze.html

Esto lleva un tiempo hasta finalizar todos los chequeos.


Consideraciones finales

Es importante mantener los certificados SSL/TLS configurados y permanentemente actualizados, colaborando a crear y mantener un Internet cada vez más seguro, pero que no nos suponga un esfuerzo económico grande. Para ello contamos con esta fabulosa plataforma sin ánimo de lucro, la cual está siendo muy bien acogida tanto por corporaciones como usuarios.


Enlaces de interés

Enlaces consultados, pincha aquíaquí y aquí.

Let’s Encrypt oficial, pincha aquí.

Let’s Encrypt Wikipedia, pincha aquí.

Internet Security Research Group oficial, pincha aquí.

Namecheap certificados oficial, pincha aquí.

Qualys test online, pincha aquí.

Noticia Google y páginas HTTP, pincha aquí.

DynDNS oficial, pincha aquí.