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
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.
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
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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