viernes, 7 de agosto de 2020

Configurar certificado wildcard (*) con Let's Encrypt

Let's Encrypt permite generar certificados wildcard (*) para un dominio en forma automática vía DNS.

En esta entrada se entregara el detalle de como realizara esta configuración mediante el  uso de la herramienta certbot con el plugin certbot-dns-rfc2136.

Descripción del ambiente

  • Servidor Linux con Redhat 6, salida a internet y python 3.6 instalado
  • Servidor Linux con Redhat 6, Bind como DNS

Metodología

El único mecanismo que existe actualmente para validar un dominio para generar un certificado wildcard (*), es mediante la incorporación de un registro de tipo TXT en el dns del dominio a configurar. Por defecto certbot solo tienen un mecanismo manual para realizar esta configuración, en el cual el administrador del dns debe generar la entrada en forma manual, pero gracias al plugin certbot-dns-rfc2136 es posible automatizar el proceso, si el dns permite el rfc2136, en este caso es bind versión 9.8.

Preparación del DNS

Para habilitar el rfc2136 en bind, se debe usar una key de autenticación en el servidor dns, para esto usaremos el comando dnssec-keygen (previo a la ejecución del comando se recomienda instalar y ejecutar el servicio haveged en el linux)

dnssec-keygen -a HMAC-MD5 -b 512 -n HOST mikey.

Esto generara dos archivos similares a los de abajo

  • Kmikey.+157+45104.key
  • Kmikey.+157+45104".private

En el archivo .private estará la key generada.

En el archivo named.conf se debe agregar (al final) la key en el siguiente formato

key mikey. {
   algorithm hmac-md5;
   secret "Z2+Bbk5cXQo3glkmRQ6b1CFmWx9337lF9VIBrUy/uju3yiy1pSLDl0y9PFg0bg==";
};

Donde secret es la key que aparece en el archivo .private

En cada definición de dominio en el archivo named.conf, se debe agregar el permiso de modificación de la siguiente forma:

zone "ejemplo.cl" {
  type master;
  file "/var/named/ejemplo.cl.hosts";
  update-policy {
    grant mikey. name _acme-challenge.ejemplo.cl. txt;
  };
};

Esto permitirá modificar la entrada _acme-challenge.ejemplo.cl al utilizar la key de modificación.

NOTA: dar permisos 770 al directorio /var/named o /var/named/chroot/var/named para que el usuario named pueda modificar el registro

Preparación del servidor donde se ejecuta certbot

En el servidor donde se ejecutara el cerbot, debe estar instalado python 3.6 con pip y mediante pip se debe instalar:

pip  install certbot
pip  install certbot-dns-rfc2136

Generar el archivo  /etc/letsencrypt/mikey.conf con la siguiente información de la key:

# IP servidor DNS
dns_rfc2136_server = 192.168.1.20
#Puerto DNS
dns_rfc2136_port = 53
# Nombre de la Key
dns_rfc2136_name = mikey.
# Secret de la key
dns_rfc2136_secret = Z2+Bbk5cXQo3glkmRQ6b1CFmWx9337lF9VIBrUy/uju3yiy1pSLDl0y9PFg0bg===
# Algoritmo usado
dns_rfc2136_algorithm = HMAC-MD5

Generar Certificado

Para generar el certificado se debe ejecutar el siguiente comando

certbot certonly  --dns-rfc2136   --dns-rfc2136-credentials /etc/letsencrypt/mikey.conf --dns-rfc2136-propagation-seconds 30  -d "*.ejemplo.cl"

Con  "--dns-rfc2136-propagation-seconds 30" se da un lapsus de 30 segundos, para que certbot pueda verificar la entrada TXT en el dns, requerido para validar el dominio.

NOTA: si existe, eliminar el directorio  /opt/eff.org

Renovar Certificado

Para renovar el certificado se ejecuta el comando anterior agregando la opción  --keep-until-expiring

certbot certonly  --dns-rfc2136   --dns-rfc2136-credentials /etc/letsencrypt/mikey.conf --dns-rfc2136-propagation-seconds 30  -d "*.ejemplo.cl" --keep-until-expiring

Se puede agendar vía crontab una vez al día

NOTA: No olvidar el . (punto) en mikey.


Instalación rapida de kvm manager de oracle

 Para instalar kvm manager de oracle se deben seguir los siguientes pasos: Instalar Oracle Linux 7 configurar el fqdn en el archivo /etc/hos...