Certificados gratuitos para el protocolo https con Let's Encrypt en Apache y raspbian.

 

Introducción

Let's Encrypt es una autoridad de certificación (CA) que facilita la obtención y la instalación de certificados TLS/SSL gratuitos, y de ese modo, permite el uso del protocolo HTTPS en servidores web.

Simplifica el proceso al proporcionar un cliente de software, Certbot, que automatiza los pasos requeridos en el proceso de obtención, instalación y renovación de un certificado en Apache.

En esta guía, utilizaremos Certbot para obtener un certificado SSL gratuito para Apache en raspbian y nos aseguraremos de que esté configurado para renovarse de forma automática.

Es muy conveniente utilizar un archivo de host virtual separado en lugar del archivo de configuración predeterminado de Apache (/etc/apache2/apache2.conf) para configurar el sitio web en el que se utilizarán certificados Let's Encrypt.

Recomendamos crear nuevos archivos de host virtual de Apache para cada dominio que se aloje en un servidor, ya que permite evitar errores comunes, y mantiene los archivos de configuración predeterminados intactos.

Hay que crearlos dentro del directorio /etc/apache2/sites-available/, y su nombre debe terminar en .conf (por ejemplo: tu_dominio.com.conf):

<VirtualHost *:80>
	ServerName tu_dominio.com
	ServerAlias www.tu_dominio.com

	ServerAdmin yo@localhost
	DocumentRoot /home/tu_dominio/public_html/

	ServerSignature Off
</VirtualHost>

<IfModule mod_ssl.c>
	<VirtualHost *:443>
		ServerName tu_dominio.com
		ServerAlias www.tu_dominio.com

		ServerAdmin yo@localhost
		DocumentRoot /home/tu_dominio/public_html/

		ServerSignature Off

		### Aqui abajo certbot escribirá la configuración de Let's Encrypt

	</VirtualHost>
</IfModule>

 

Para activarlo has de ejecutar:

sudo a2ensite tu_dominio.com
sudo service apache2 reload

 

Para desactivarlo puedes ejecutar:

sudo a2dissite tu_dominio.com
sudo service apache2 reload

 

 

1 - Instalar Certbot

Para obtener un certificado SSL con Let's Encrypt, recuerda que la entrada tu_dominio.com en el servidor DNS ha de apuntar a la IP del servidor donde está alojado tu dominio, y ese servidor ha de ser visible en internet.

Luego debes instalar el software Certbot en el servidor. Para hacerlo, puedes utilizar los repositorios de paquetes predeterminados de raspbian.

Hacen falta dos paquetes: certbot y python3-certbot-apache. Este último es un complemento que integra Certbot con Apache, lo que permite automatizar la obtención de certificados y configurar HTTPS dentro del servidor web con un solo comando.

sudo apt install certbot python3-certbot-apache

 

Si te dice que no ha encontrado los paquetes, puedes descargarlos e instalarlos a mano.

Si tu raspberry pi (raspbian) está basado en debian buster, ejecuta:

cd
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot/certbot_0.31.0-1+deb10u1_all.deb
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot-apache/python3-certbot-apache_0.31.0-1_all.deb
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot/python3-certbot_0.31.0-1+deb10u1_all.deb

Si tu raspberry pi (raspbian) está basado en debian bullseye, ejecuta:

cd
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot/certbot_1.12.0-2_all.deb
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot-apache/python3-certbot-apache_1.10.1-1_all.deb
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot/python3-certbot_1.12.0-2_all.deb

Si no sabes si está basado en buster o bullseye, ejecuta:

cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Para instalar los tres paquetes, ejecuta:

sudo dpkg -i certbot*.deb python3-certbot-apache*.deb python3-certbot*.deb

Quedarán sin configurar (falta por instalar las dependencias)

Para instalar las dependencias y configurarlos, ejecuta:

sudo apt -f install

 

Ahora tienes Certbot instalado en tu servidor.

En el siguiente paso, puedes verificar la configuración de Apache para asegurarte de que tu host virtual esté configurado de forma adecuada.

sudo apache2ctl configtest
Syntax OK

Esto garantizará que la secuencia de comandos del cliente certbot pueda detectar tus dominios y configurar apache para que utilice el certificado SSL recién creado de forma automática.

 

 

2 - Obtener un certificado SSL

Certbot ofrece varias alternativas para obtener certificados SSL a través de complementos. El complemento de Apache se encargará de reconfigurar Apache y volver a cargar la configuración siempre que sea necesario. Para utilizar este complemento, ejecuta:

sudo certbot --apache

Este comando solicitará que respondas a una serie de preguntas para configurar tu certificado SSL. Primero, solicitará una dirección de correo electrónico válida. Esta dirección se utilizará para las notificaciones de renovación y los avisos de seguridad.

Después de proporcionar una dirección de correo electrónico válida, se te solicitará que confirmes si aceptas las condiciones de servicio de Let's Encrypt. Puedes confirmar pulsando A.

A continuación, se te solicitará que confirmes si deseas compartir tu dirección de correo electrónico con Electronic Frontier Foundation para recibir noticias u otra información. Si no deseas suscribirte a su contenido, escribe N. De lo contrario, escribe Y. Luego, presiona ENTER para continuar con el siguiente paso.

En el siguiente paso, solicitará que informes a Certbot los dominios para los que deseas activar HTTPS. Los nombres de dominio enumerados se obtienen de forma automática de la configuración del host virtual de Apache, por lo tanto, es importante que te asegures de que los ajustes de ServerName y ServerAlias estén configurados correctamente en tu host virtual.

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

 

A continuación, se te solicitará que selecciones si deseas que el tráfico de HTTP se redirija a HTTPS o no. En la práctica, esto significa que cuando alguien visite tu sitio web a través de canales no cifrados (HTTP), se lo redirigirá automáticamente a la dirección HTTPS de tu sitio web. Selecciona 2 para habilitar el redireccionamiento o 1 si deseas mantener HTTP y HTTPS como métodos de acceso al sitio web separados.

 

Si todo ha ido bien, al final verás esto:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://tu_dominio.com
and https://www.tu_dominio.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=tu_dominio.com
https://www.ssllabs.com/ssltest/analyze.html?d=www.tu_dominio.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/tu_dominio.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/tu_dominio.com/privkey.pem
   Your cert will expire on 2020-07-27. 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

Ahora, tu certificado está instalado. Para cargar la nueva configuración, activa mod_ssl y reinicia apache:

sudo a2enmod ssl
sudo service apache2 restart

Ahora ya puedes utilizar https://tu_dominio.com o https://www.tu_dominio.com

 

 

Más info sobre la renovación automática de Certbot

Los certificados de Let's Encrypt son válidos únicamente por noventa dias. Se utiliza este período tan corto de validez para que los usuarios automaticen su proceso de renovación de certificados, así como para garantizar que los certificados mal utilizados o las claves robadas expiren lo antes posible.

El software certbot que instalaste se encarga de las renovaciones del siguiente modo:

Tanto en un caso como en otro, la orden a ejecutar será:

/usr/bin/certbot -q renew

y se ejecutará cada 12 horas pero con un retraso aleatorio para que no coincidan millones de renovaciones de certificados a la misma hora y minuto.

 

Ejecutando...

sudo service certbot status
● certbot.service - Certbot
   Loaded: loaded (/lib/systemd/system/certbot.service; static; vendor preset: enabled)
   Active: inactive (dead) since Thu 2021-10-21 06:51:39 CEST; 7h ago
     Docs: file:///usr/share/doc/python-certbot-doc/html/index.html
           https://letsencrypt.readthedocs.io/en/latest/
  Process: 8153 ExecStart=/usr/bin/certbot -q renew (code=exited, status=0/SUCCESS)
 Main PID: 8153 (code=exited, status=0/SUCCESS)

oct 21 06:51:37 raspberrypi systemd[1]: Starting Certbot...
oct 21 06:51:39 raspberrypi systemd[1]: certbot.service: Succeeded.
oct 21 06:51:39 raspberrypi systemd[1]: Started Certbot.

puedes comprobar cuando se ha ejecutado por última vez.

 

También puedes comprobar el estado actual de tus certificados:

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: tu_dominio.com
    Domains: tu_dominio.com www.tu_dominio.com
    Expiry Date: 2021-12-29 11:23:18+00:00 (VALID: 68 days)
    Certificate Path: /etc/letsencrypt/live/tu_dominio.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/tu_dominio.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 

 

Eliminar un certficado

Si por la razón que sea, quieres eliminar un certificado, la manera correcta de hacerlo es...

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

Which certificate(s) would you like to delete?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: tu_dominio.com
2: www.tu_dominio.com
3: other_domain.com
4: www.other_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1,2