Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Certificado TSL para conexión segura HTTPS con Let’s Encrypt y certbot

Imago voragine.net

Los certificados TSL permiten conectarse de manera segura a un sitio web usando el protocolo HTTPS (secure HTTP). Son conexiones seguras porque los datos que viajan desde el ordenandor del visitante hasta el servidor donde está alojado el sitio web, y viceversa, están encriptados y nadie puede inspeccionarlos.

El protocolo HTTPS encripta los datos utilizando criptografía asimétrica, que utiliza un par de claves: una pública para cifrar la información y otra privada para descifrarla. El servidor HTTPS difunde su clave pública a cualquier ordenador cliente que quiera conectarse a él, y guarda en secreto su clave privada.

El problema con la criptografía asimétrica es estar seguros de que la clave pública corresponde efectivamente al servidor al que se quiere conectar. De lo contrario existe el peligro de conectarse a un servidor que suplante al original.

Para asegurar la autenticidad de la clave pública de un servidor lo más eficaz es conocer una de las personas que gestionan el servidor, encontrarla presencialmente y que nos dé la clave. En un sistema global como internet en el se visitan servidores que están en otros continentes hubo que buscar otra manera. Es en este punto donde entran en juego las entidades de certificación: organizaciones de confianza que certifican la autenticidad de una clave pública.

Let’s Encrypt es la primera entidad de certificación que emite certificados gratuitos y de manera automática. El proceso para obtener un certificado se puede hacer íntegramente desde la línea de comandos usando certbot.

Obtener un certificado Let’s Encrypt e instalarlo usando certbot

Las siguientes instrucciones son para un servidor Debian con Apache2.

Lo primero que hay que hacer es instalar certbot. Este paquete no está en los repositorios de la versión estable Debian Jessie, hay que instalarlo usando los backports:

cerbot permite instalar certificados de varias maneras en función del grado de automatización de la instalación y del servidor web que se use.

Para instalaciones de Apache más o menos sencillas se puede recurrir al plugin de cerbot para Apache (existe también uno para Nginx), que se pueden instalar también de los repositorios de debian:

Todo el proceso de petició del certificado a Let’s Encrypt, su instalación en el servidor y la modificación de los archivos de configuración del servidor web se hacen con un único comando. La única información que le tenemos que pasar a cerbot es el dominio, usando el parámetro -d:

Se puede solicitar el certificado para el dominio y varios subdominios a la vez:

Para instalaciones más personalizadas de Apache (Apache funcionando con FPM, por ejemplo) esta manera puede no funcionar. Si es así se puede recurrir a webroot, la manera semiautomática de certbot. webroot hace la petición y la instalación del certificado, pero la configuración habrá que modificarla manualmente. Para que cerbot funcione hay que pasarle como argumento (-w) la ruta absoluta del sitio web, y los dominios (-d):

certbot crea una carpeta en el raíz del sitio web llamada .well-know para certificar que el dominio está en el servidor desde el que se está haciendo la petición. El script crea un archivo temporal que Let’s Encrypt comprueba vía HTTP. Es importante que el archivo se cree con los permisos adecuados para que sea visible vía HTTP, de lo contrario el proceso de instalación del certificado fallará.

Si el proceso es exitoso veremos un mensaje como el siguiente:

Se puede comprobar que Let’s Encrypt ha accedido con éxito al archivo mirando los logs de Apache:

Luego modificamos la configuración del virtual host, redirigiendo las peticiones que lleguen al puerto 80, HTTP, al 443, HTTPS:


ServerName voragine.net
Redirect 301 / https://voragine.net/

Por último ponemos a la escucha el puerto 443 para el dominio y vinculamos el certificado con el virtual host:


ServerName voragine.net
ServerAlias www.voragine.net

# Resto de configuración del virtual host

SSLCertificateFile /etc/letsencrypt/live/voragine.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/voragine.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

Renovar certificados

Los certificados de Let’s Encrypt tienen una validez de 6 meses. Se pueden renovar también usando la línea de comandos.

La opción renew de cerbot renueva todos los certificados que vayan a caducarse en los próximos 30 días:

La renovación de puede automatizar por ejemplo con cron.

Eliminar certificados

Para eliminar un certificado:
certbot revoke –cert-path /etc/letsencrypt/live/voragine.net/cert.pem -d voragine.net -d www.voragine.net

Para saber el estado de un certificado podemos recurrir a las siguientes herramientas en línea:

No hay comentarios

Dejar un comentario

*
*

 

Un trackback

  • Hay un sábado de común denominadores | Sursiendo

    […] quienes quieran profundizar más: Certificado TSL para conexión segura HTTPS con Let’s Encrypt y CertBot, la primera entidad de certificación que emite certificados gratuitos y de manera automática. El […]