Certificado SSL con Let's Encrypt

Author
By Darío Rivera
Posted on 2020-05-24 in OpenSSL

Let's Encrypt es una autoridad de certificación que permite acceder a certificados SSL de manera fácil y gratuita. Varias organizaciones alrededor del mundo están detrás de este proyecto entre las que sobresalen Facebook, Google Chrome, Mozilla Foundation y Linux Foundation. Los certificados otorgados por Let's encrypt son de 90 días pudiendo automatizar la renovación del mismo. En este post vamos a aprender cómo instalar y configurar Let's encrypt para generar un certificado para tu sitio web.

Prerrequisitos

Para seguir este tutorial asumimos que cumples con los siguientes prerequisitos:

  • Un dominio registrado
  • Los siguientes registros DNS configurados en tu servidor
    • Un registro A con tu_dominio hacia la ip pública del servidor
    • Un registro A con www.tu_dominio hacia la ip pública del servidor
  • Servidor apache instalado
  • Un archivo de configuración (.conf) único por tu dominio

Paso 1 - Instalar Certbot

Dependiendo del sistema operativo que tengas en tu máquina el proceso de instalación de Certbot puede variar un poco. Te invito a revisar el enlace correspondiente a tu versión de sistema operativo.

- Instalación en Debian 10 (Buster)
- Instalación en Ubuntu 20.04 (Focal Fossa)

Paso 2 - Verifica tu virtualhost y módulos de apache

Verifica el archivo de configuración de apache (.conf) de tu dominio y asegurate que tiene la directiva ServerName apuntando a tu dominio.

Por otro lado, debes asegurarte que tienes activados los módulos mod_rewrite y mod_ssl. Si no estás seguro de esto último puedes probar activándolos de la siguiente manera:

sudo a2enmod rewrite
sudo a2enmod ssl

Paso 3 - Permite el tráfico HTTPS a travpes del firewall

Si tienes activa el firewall asegúrate que el tráfico por HTTPS está permitido. En nuestro post Protege tu servidor Linux con UFW (Uncomplicated Firewall) explicamos como configurar UFW en 5 minutos. Si seguiste este tutorial puedes permitir el tráfico tanto HTTP como HTTPS con el siguiente comando.

ufw allow 'WWW Full'

Paso 4 - Usa Certbot para obtener el certificado

Una vez todo lo anterior listo es cuestión de correr el siguiente comando para obtener el certificado.

sudo certbot --apache -d your_domain -d www.your_domain

Cada vez que utilizad el parámetro -d estás habilitando un dominio para el cual el certificado será válido. Al ejecutar este comando se te solicitará el correo y la aceptación de los términos.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): tu_correo@dominio_correo.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Después de esto te preguntará si deseas compartir tu correo con en la Electronic Frontier Foundation, una organización sin ánimo de lucro encargada del desarrollo de Certbot.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

Finalmente deberás seleccionar si deseas redirección automática desde HTTP hacia HTTPS. Yo personalmente prefiero realizar este paso de manera manual. Te en cuenta que si ya tienes una aplicación en este dominio con un archivo .htacces la redirección automática no funcionará. Al finalizar el proceso obtendrás una respuesta como la siguiente:

Congratulations! You have successfully enabled https://example.com

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

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

Ten presente el directorio que creó Let's Encrypt al generar tu certificado. Debería ser similar al siguiente /etc/letsencrypt/live/TU_DOMINIO/fullchain.pem.

Paso 5 - Configura la redirección HTTPS

Let's Encrypt debió haber creado un archivo único de configuración para tu dominio con un nombre similar al siguiente:

/etc/apache2/sites-available/TU_DOMINIO-le-ssl.conf

Este es el archivo de configuración SSL de tu dominio, en este momento ya deberías poder acceder a tu web tanto por HTTP como por HTTPS. Sin embargo, lo más conveniente sería que si un visitante accede a tu sitio por la versión HTTP sea redireccionado a la misma página en versión HTTPS. Para esto puedes seguir el siguiente tutorial.

Redirección HTTP a HTTPS en apache

Paso 7 - Configura la renovación automática de los certificados

Recuerda que los certificados de Let's Encrypt son válidos por un perido de 90 días. Afortunadamente para nosotros Let's Encrypt ha configurado de manera automática un script en /etc/cron.d que realiza de manera automática la renovación. Esta tarea se realiza dos veces por día y renueva aquellos certificados que estén por expirar en 30 días. Para testear el proceso de renovación puedes ejecutar el siguiente comando.

sudo certbot renew --dry-run

Paso 8 - Guarda tus certificados en un lugar seguro

Como último paso no sobra decirte que realices periódicamente una copia del directorio /etc/letsencrypt/. Allí está toda la configuración, cuentas, llaves y archivos generados por Let's Encrypt en caso de que los necesites si realizas la migración de tu web a otro servidor.


Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.