Cómo instalar un certificado SSL en servidor Ubuntu de Let’s Encrypt

Let’s Encrypt es un proveedor de Certificados de Autoridad (CA) gratuito que permite una fácil manera de obtener e instalar certificados TLS/SSL y así poder habilitar la cabezera HTTPS en el servidor web.

Este software simplifica el proceso porque dispone de la aplicación Certbot, un software que automatiza los pasos necesarios para adquirir el certificado.

A través de este tutorial, se obtendrá y configurará Let’s Encrypt en un servidor Ubuntu que utiliza como servidor web NGINX. Además, se optimizará para que se renueve de forma automática.

Luego, disfruta de tu certificado SSL gratuito.


Requisitos para la instalación de un certificado SSL Let’s Encrypt

  • Un servidor Ubuntu configurado con un firewall y un usuario con permisos de administración que no sea el root
  • Un nombre de dominio registrado
  • Los registros nombre_de_dominio.com y www.nombre_de_dominio.com configurados en tu servidor de nombres de dominio y que apunten a la dirección ip pública que proporciona tu proveedor del servidor
  • NGINX instalado y configurado con un bloque de servidor que tenga la información de tu nombre de dominio

Pasos para instalar y configurar un certificado SSL Let’s Encrypt

1 – Instalación de Certbot

El primer paso es instalar el software Certbot y su plugin NGINX.

sudo apt install certbot python3-certbot-nginx

2 – Confirmar la configuración de NGINX

Certbot necesita el bloque de servidor de NGINX donde se va a instalar y configurar el certificado. Especialmente, necesita la directiva server_name que contiene el nombre de dominio al cual se le va a instalar el certificado.

Acceso al documento de configuración del bloque de servidor:

sudo vi /etc/nginx/sites-available/nombre_de_documento

Puedes utilizar el editor de texto que desees, nano o vim.

No es necesario escribir algo, solo confirma que en la directiva server_name está la información del nombre de dominio en el cual deseas instalar y configurar el certificado.

...server_name nombre_de_dominio.com www.nombre_de_dominio.com;...

Realiza estos dos pasos adicionales si deseas:

  • Confirmar que el bloque de servidor esté bien escrito con sudo nginx -t
  • Reiniciar el servicio NGINX sudo systemctl reload nginx

3 – Habilitar HTTPS en el Firewall

Si tiene el firewall ufw habilitado deberá realizar algunas configuraciones para permitir el tráfico HTTPS de Internet. Por fortuna, NGINX en su momento de instalación agrega algunas directivas por defecto.

Observa las configuraciones a través de la siguiente instrucción:

sudo ufw status

Si no tiene su firewall ufw activado, puede activarlo con la siguiente instrucción:

sudo ufw enable

Es probable que vea esta información en consola

OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Dependiendo del proveedor del servicio de servidor web, tendrá que utilizar ufw para configurar el Firewall. Por ejemplo, para personas con un servidor web contratado en Amazon Web Services, no es necesario, pues el Firewall se configura en su panel de administración.

4 – Obtenga su certificado SSL

Certbot proporciona diferentes maneras para adquirir un certificado SSL ¿Recuerdas el plugin de NGINX instalado en el momento de instalar Certbot? Pues con ese lo vamos a crear.

sudo certbot --nginx -d nombre_de_dominio.com -d www.nombre_de_dominio.com

El asistente te solicitará un correo electrónico para que Certbot te envíe información sobre tu certificado SSL

Saving debug log to /var/log/letsencrypt/letsencrypt.logEnter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected]

Además, tendrás que aceptar los términos y condiciones del servicio. Presiona “y”.

Una vez hayas obtenido el certificado, en la consola aparecerá el siguiente mensaje:

Successfully received certificate.Certificate is saved at: /etc/letsencrypt/live/nombre_de_dominio.com/fullchain.pemKey is saved at:         
/etc/letsencrypt/live/nombre_de_dominio.com/privkey.pem
This certificate expires on 2023-08-12.These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificateSuccessfully deployed certificate for nombre_de_dominio.com to /etc/nginx/sites-enabled/nombre_de_documento
Successfully deployed certificate for www.cultureado.com to /etc/nginx/sites-enabled/nombre_de_documento
Congratulations! You have successfully enabled HTTPS on https://nombre_de_dominio.com and https://www.nombre_de_dominio.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Por lo general los certificados caducan cada tres meses, pero no te preocupes, lo configuraremos para que se renueve automáticamente.

5 – Confirmar la renovación automática del certificado

Los certificados obtenidos con Let’s Encrypt tienen una duración de 90 días a partir de su configuración inicial. Pero gracias Certbot, la renovación del servicio se realiza de forma automática.

Confirmemos el estado del certificado para su renovación:

sudo systemctl status certbot.timer

Se observará la siguiente información en consola

● certbot.timer - Run certbot twice daily     
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)     
Active: active (waiting) since Sun 2023-05-14 16:40:39 UTC; 37min ago    
Trigger: Mon 2023-05-15 06:23:12 UTC; 13h left   
Triggers: ● certbot.serviceMay 14 16:40:39 ip-172-31-40-145 systemd[1]: 
Started Run certbot twice daily.

Si deseas probar la renovación del certificado, ingresa la siguiente instrucción en consola:

sudo certbot renew --dry-run

En consola aparecerá la siguiente información simulando el proceso de renovación:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/nombre_de_dominio.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.Simulating renewal of an existing certificate for nombre_de_dominio.com and www.nombre_de_dominio.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:  /etc/letsencrypt/live/nombre_de_dominio.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Scroll to Top