Categorías
Software

Normalizando el uso de certbot …

… porque ésto empieza a parecer un sindiós y así no se puede.

[toc]

Objetivos

  1. Usar el programa certbot ya que está empaquetado para Debian.
    1. Definir un archivo de configuración.
  2. Organizar los certificados en un sitio determinado:
    1. Elegir un directorio para los certificados.
    2. Determinar quiénes pueden acceder a ellos.
  3. Instalar un script que:
    1. Verifique los permisos de acceso.
    2. Reinicie servicios para que tengan en cuenta los cambios.
    3. Registre dichos cambios en la configuración si es necesario..

Usar el programa certbot

En la versión Jessie de Debian el programa se encuentra en el repositorio backports. En la nueva versión estable ya está en los respositorios normales.

En ambos casos su instalación arrastra un buen montón de paquetes Python pero no realiza cambios drásticos en el sistema.

Definir un archivo de configuración

El programa certbot puede emplear un archivo en formato .ini con el parámetro -c archivo o --config archivo, aunque también intenta localizarlo en los siguientes sitios:

  1. /etc/letsencrypt/cli.ini
  2. ~/.config/letsencrypt/cli.ini.

He guardado una plantilla con una configuración mínima, también para el servidor web Apache, en mi wiki.

Organizar los certificados

La organización viene dada por el propio programa. Todo lo guarda bajo el directorio /etc/letsencryt de la siguiente forma:

/etc/letsencrypt# ls -1l
total 32
drwx------ 4 root root 4096 ene 13 11:40 accounts
drwxr-x--- 3 root ssl-cert 4096 ene 16 19:40 archive
-rw-r--r-- 1 root root 767 abr 5 11:38 certbot.log
-rw-r--r-- 1 root root 354 ene 13 11:32 cli.ini
drwxr-xr-x 2 root root 4096 abr 7 12:22 csr
drwx------ 2 root root 4096 abr 7 12:22 keys
drwxr-x--- 3 root ssl-cert 4096 ene 16 19:40 live
drwxr-xr-x 2 root root 4096 abr 7 12:22 renewal


y sólo tenemos que permitir el acceso a través de los mecanismos habituales del sistema. Para ello usamos el grupo ssl-certen los archivos que contienen certificados y claves y le asignamos las cuentas de usuario de los servicios que lo necesiten.

La mayor parte de esos programas funcionan como root por lo que sólo tendremos que aplicarlo en algunos casos muy específicos: el servidor prosody y poco más.

Script para completar el proceso de renovación

He creado uno dentro de un pequeño proyecto que mantengo con este tipo de herramientas y que puede verse aquí. No hace gran cosa y debe llamarse en las siguientes condiciones:

  1. Los certificados se hayan renovado o creado por completo (y no de uno en uno).
  2. No queramos detener el servicio durante la renovación.

El programa necesita una configuración mínima por si es necesario instalarlo en sistemas con otra disposición. Lee, si existe, el archivo /etc/letsencrypt.conf que tiene lo siguiente como predeterminado:

# Directorio raíz de los certificados
TARGET=/etc/letsencrypt/live

# Grupo y máscara de archivos y directorios
GROUP=ssl-cert
DIRMODE=0750
MODE=0640

# Servicios a comprobar y reiniciar
SERVICES="qpsmtpd exim4 prosody apache2 dovecot" 

# Parámetros para recibir los certificados desde 
# el sistema que los genera (opcional)
SOURCE=/tmp/letsencrypt
FILES="fullchaim.pem prìvkey.pem chain.pem cert.pem cert.csr"