Certbot logo, a robot holding a key

When: 2022

Why: To get a free ssl certificate on self administrate webserver

Time: 5 min

Tags: Debian, Apache, SSL, Certbot

What’s Certbot?

Certbot is a free, open source software tool for automatically using Let’s Encrypt certificates on manually-administrated websites to enable HTTPS.

Certbot is made by the Electronic Frontier Foundation (EFF), a 501(c)3 nonprofit based in San Francisco, CA, that defends digital privacy, free speech, and innovation.

What you will need:

  1. Apache Website with an open port 80 (yes, only this port)
  2. sudo access

1. Install snap package manager and refresh its core:

sudo apt install snapd
sudo snap install core
sudo snap refresh core

2. Install Certbot:

sudo snap install --classic certbot

3. Create a symbolic link to the snap directory:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

4. Configure Certbot with Apache server

sudo certbot --apache

It will ask for the sites you want to activate HTTPS.

Thats all, you certificates where saved to /etc/letsencrypt/live and where deployed to the Apache config files. This is 000-default-le-ssl.conf:

And this is This is 000-default.conf:

Now just restart Apache service:

sudo apt restart apache2

The Certbot packages will renew your certificates before they expire. You can check if there is the cronjob for this task:

systemctl list-timers

You will see all the task that are scheduled on your system:

NOTE:

The site must be in both files: 000-default-le-ssl.conf and 000-default.conf, if not, please add and run:

sudo certbot install --cert-name www.yoursite.com

Subdominio:

Aquí tienes el proceso completo para configurar HTTPS en un subdominio usando Certbot con Apache en tu servidor Linux.


1. Configurar el subdominio en DNS

Antes de instalar el certificado, asegúrate de que tu subdominio (subdominio.tudominio.com) apunta a la IP pública de tu servidor.

  1. Accede a la configuración de DNS de tu proveedor de dominio.
  2. Añade un registro A, con la siguiente configuración:
    • Tipo: A
    • Nombre: subdominio (por ejemplo, app para app.tudominio.com)
    • Valor: TU_IP_PUBLICA (ejemplo: 123.123.123.123)
    • TTL: 300 (valor predeterminado)
  3. Espera la propagación de DNS (puede tardar algunos minutos a varias horas). Verifica con:bashCopyEditnslookup subdominio.tudominio.com

2. Instalar Apache y Certbot

Si aún no tienes Apache o Certbot instalado, instálalos con los siguientes comandos:

bashCopyEditsudo apt update
sudo apt install apache2 certbot python3-certbot-apache -y

Verifica que Apache esté corriendo correctamente:

bashCopyEditsudo systemctl status apache2

Si no está en ejecución, inícialo con:

bashCopyEditsudo systemctl start apache2

Y habilítalo para que inicie automáticamente al arrancar el sistema:

bashCopyEditsudo systemctl enable apache2

3. Configurar VirtualHost para el subdominio

Crea un archivo de configuración para el subdominio en Apache:

bashCopyEditsudo nano /etc/apache2/sites-available/subdominio.tudominio.com.conf

Agrega el siguiente contenido:

apacheCopyEdit<VirtualHost *:80>
    ServerName subdominio.tudominio.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/subdominio-error.log
    CustomLog ${APACHE_LOG_DIR}/subdominio-access.log combined
</VirtualHost>

Guarda el archivo y ciérralo (Ctrl + X, luego Y y Enter).

Habilita la configuración del sitio:

bashCopyEditsudo a2ensite subdominio.tudominio.com.conf

Reinicia Apache para aplicar los cambios:

bashCopyEditsudo systemctl restart apache2

4. Obtener un certificado SSL para el subdominio

Ejecuta Certbot para obtener un certificado gratuito para el subdominio:

bashCopyEditsudo certbot --apache -d subdominio.tudominio.com
  • Introduce tu correo electrónico para notificaciones.
  • Acepta los términos de servicio.
  • Elige si deseas redirigir todo el tráfico HTTP a HTTPS (se recomienda elegir ).

Certbot configurará automáticamente Apache para usar el certificado SSL.


5. Verificar la instalación del certificado

Una vez completado el proceso, prueba tu sitio visitando:

bashCopyEdithttps://subdominio.tudominio.com

También puedes verificar el certificado con:

bashCopyEditsudo certbot certificates

6. Configurar renovación automática del certificado

Let’s Encrypt expira cada 90 días, pero Certbot puede renovarlo automáticamente.

Prueba la renovación automática con:

bashCopyEditsudo certbot renew --dry-run

Si todo está correcto, puedes automatizar la renovación con un cron job. Abre el editor de cron con:

bashCopyEditsudo crontab -e

Agrega la siguiente línea para que renueve el certificado automáticamente cada mes:

bashCopyEdit0 3 1 * * /usr/bin/certbot renew --quiet

Esto ejecutará la renovación el día 1 de cada mes a las 3:00 AM.


7. Forzar la redirección HTTP a HTTPS (si es necesario)

Si Certbot no configuró la redirección automáticamente, puedes hacerlo manualmente editando el archivo de configuración del subdominio:

bashCopyEditsudo nano /etc/apache2/sites-available/subdominio.tudominio.com-le-ssl.conf

Asegúrate de que tenga la siguiente configuración para redirigir HTTP a HTTPS:

apacheCopyEdit<VirtualHost *:80>
    ServerName subdominio.tudominio.com
    Redirect permanent / https://subdominio.tudominio.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName subdominio.tudominio.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/subdominio.tudominio.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/subdominio.tudominio.com/privkey.pem

    <Directory /var/www/html>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Guarda el archivo y reinicia Apache:

bashCopyEditsudo systemctl restart apache2

8. Verificar la configuración de HTTPS

Usa el siguiente comando para verificar que la redirección funciona correctamente:

bashCopyEditcurl -I http://subdominio.tudominio.com

Debe redirigirte a https://subdominio.tudominio.com.

También puedes probar la seguridad del certificado SSL en SSL Labs Test.


9. Solución de problemas comunes

Si tienes problemas durante la instalación o configuración, prueba los siguientes comandos:

  • Verificar la configuración de Apache:bashCopyEditsudo apachectl configtest
  • Ver los logs de errores de Apache:bashCopyEditsudo journalctl -u apache2 -f
  • Revisar el estado del servicio:bashCopyEditsudo systemctl status apache2
  • Si necesitas eliminar un certificado, puedes usar:bashCopyEditsudo certbot delete --cert-name subdominio.tudominio.com