Fecha de publicación: Lun, 03/06/2019 - 11:04

Introducción

Lets Encrypt es un servicio que ofrece certificados SSL gratuitos a través de una API. Certbot es un cliente de Lets Encrypt, que tiene varias formas de validar el dominio, busca certificados y configura automáticamente Apache y Nginx.

En esta guía se obtendrá los certificados lets encrypt para cualquier tipo de servicio, sin entrar en detalles de la configuración del certificado. Se utilizará Debian 9 y CentOS 7.

1. Certificados Lets Encrypt en Debian 9

Requisitos

  • Debian 9, permisos de root
  • Nombre de dominio resolviendo a su servidor (ejemplo: entidad.gob.bo)
  • No se debe usar el puerto 80 o 443 (certbot genera un servicio temporal)

1.1. Instalación de Certbot

Debian 9 incluye el cliente de Certbot en los repositorios por defecto, usamos apt para instalarlo:

$ sudo apt install certbot

Verificamos la instalación obteniendo la versión de certbot

$ certbot --version

Salida

certbot 0.XX.0

 

1.2. Ejecutando Certbot

Certbot debe comprobar que el dominio es nuestro, para ello usa el puerto 80 (HTTP) o 443 (HTTPS), razón por la cual abrimos el puerto en el firewall

$ sudo ufw allow 80

Salida

Rule added
Rule added (v6)

Ejecutamos certbot en un servidor web temporal (--standalone) para obtener los certificados, en el ejemplo usamos el parametro ‘http’, para https use tls-sni (--preferred-challenges), e ingresamos el nombre de dominio (-d).

$ sudo certbot certonly --stantalone --preferred-challenges http -d entidad.gob.bo

Salida

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/entidad.gob.bo/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/entidad.gob.bo/privkey.pem
   Your cert will expire on 2019-10-01. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. 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

Nota: Para la configuración automática de Apache o Nginx puede usar:

$ sudo cerbot --apache -d entidad.gob.bo

Ó

$ sudo cerbot --nginx -d entidad.gob.bo

 

1.3. Configurando la aplicación

Certbot descarga varios archivos relacionados al certificado:

$ sudo ls /etc/letsencrypt/live/entidad.gob.bo

Salida

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

Detalles:

README: más información de estos archivos

privkey.pem: la llave privada del certificado, almacenar en un lugar secreto y seguro

fullchain.pem: el certificado, incluido con todos los certificados intermedios

Para más información al respecto ver: https://certbot.eff.org/docs/using.html#where-are-my-certificates

A continuación debe configurar su servidor de aplicación con los certificados de Lets Encrypt obtenidos.

 

1.4. Renovación automática del certificado

Los certificados de lets encrypt son válidos por 90 días, para hacer la renovación automáticamente se debe agregar un script a /etc/cron.d el cual se ejecutará 2 veces al día. Para completar la renovación es necesario aplicar los cambios editando el archivo:

$ sudo nano /etc/letsencrypt/renewal/entidad.gob.bo.conf

Y agregamos la opción renew_hook el cual nos permite realizar tareas posteriores a la obtención del certificado:

 renew_hook = systemctl reload <nombre del servicio> 

Ejecutamos certbot para comprobar que no haya errores

$ sudo certbot renew --dry-run

 

2. Certificados Lets Encrypt en CentOS 7

Requisitos

  • CentOS 7 server con usuario no root pero con privilegios de sudo.
  • Nombre de dominio resolviendo a su servidor (ejemplo: entidad.gob.bo).
  • El puerto 80 o 443 no debe estar en uso.

 

2.1. Instalando Certbot

Certbot es un paquete que se encuentra en Extra Packages for Enterprise Linux (EPEL). Habilitamos este repositorio en CentOS 7:

$ sudo yum --enablerepo=extras install epel-release

Instalamos certbot:

$ sudo yum install certbot

Verificamos la instalación obteniendo la versión de certbot

$ certbot --version

Salida

certbot 0.XX.0

 

2.2. Ejecutando Certbot

Certbot debe comprobar el dominio para obtener el certificado, para ello se habilita el puerto 80 (http) o 443 (https)

$ sudo firewall-cmd --add-service=http

$ sudo firewall-cmd --runtime-to-permanent

Sustituir http por https si se usa el puerto 443

Ejecutamos certbot en un servidor web temporal (--standalone) para obtener los certificados en este caso usamos el parametro ‘http’, para https use tls-sni (--preferred-challenges), e ingresamos el nombre de dominio (-d).

$ sudo certbot certonly --standalone --preferred-challenges http -d entidad.gob.bo

Salida

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/entidad.gob.bo/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/entidad.gob.bo/privkey.pem
   Your cert will expire on 2019-10-01. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. 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

Nota: Para la configuración automática de apache o nginx puede usar:

$ sudo cerbot --apache -d entidad.gob.bo

Ó

$ sudo cerbot --nginx -d entidad.gob.bo

 

2.3. Configurando la aplicación

Certbot ha descargado varios archivos relacionados al certificado:

$ sudo ls /etc/letsencrypt/live/entidad.gob.bo

Salida

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

Detalles:

README: más información de estos archivos

privkey.pem: la llave privada del certificado, almacenar en un lugar secreto y seguro

fullchain.pem: el certificado, incluido con todos los certificados intermedios

Para más información al respecto ver: https://certbot.eff.org/docs/using.html#where-are-my-certificates

A continuación debe configurar su servidor de aplicación con los certificados de Lets Encrypt obtenidos.

 

2.4. Renovación automática del certificado

Los certificados de lets encrypt son solo válidos por 90 días, para hacer la renovación automáticamente certbot incluye systemd timer para verificar 2 veces al día el cual esta deshabilitado por defecto, y lo habilitamos:

$ sudo systemctl enable --now certbot-renew.timer

Salida

Created symlink from /etc/systemd/system/timers.target.wants/certbot-renew.timer to /usr/lib/systemd/system/certbot-renew.timer.

Verificamos el estado del servicio:

$ sudo systemctl status certbot-renew.timer

certbot-renew.timer - This is the timer to set the schedule for automated renewals
   Loaded: loaded (/usr/lib/systemd/system/certbot-renew.timer; enabled; vendor preset: disabled)
   Active: active (waiting) since Fri 2019-05-31 18:10:10 UTC; 48s ago

 

2.5. Ejecutando tareas después de la renovación de certificados

Para completar la renovación es necesario aplicar los cambios editando el archivo:

$ sudo vi /etc/letsencrypt/renewal/entidad.gob.bo.conf

Y agregamos la opción renew_hook el cual nos permite realizar tareas posteriores a la obtención del certificado:

renew_hook = systemctl reload <nombre del servicio>

Ejecutamos certbot para comprobar que no haya errores

$ sudo certbot renew --dry-run