Autoridad de certificación (CA)

Zentyal integra OpenSSL® [4] para la gestión de la Autoridad de Certificación y del ciclo de vida de los certificados expedidos por esta.

[4]OpenSSL: http://www.openssl.org/

Configuración de una Autoridad de Certificación con Zentyal

En Zentyal, el módulo Autoridad de Certificación es autogestionado, lo que quiere decir que no necesita ser habilitado en Estado de los Módulos como el resto sino que para comenzar a utilizar este servicio hay que inicializar la CA. Las funcionalidades del módulo no estarán disponibles hasta que no hayamos efectuado esta acción.

Accederemos a Autoridad de Certificación ‣ General y nos encontraremos con el formulario para inicializar la CA. Se requerirá el Nombre de Organización y el número de Días para expirar. Además, también es posible especificar opcionalmente Código del País (acrónimo de dos letras que sigue el estándar ISO-3166-1 [5]), Ciudad y Estado.

Creando la Autoridad de Certificación

Creando la Autoridad de Certificación

A la hora de establecer la fecha de expiración hay que tener en cuenta que en ese momento se revocarán todos los certificados expedidos por esta CA, provocando la parada de los servicios que dependan de estos certificados.

Una vez que la CA ha sido inicializada, ya podremos expedir certificados. Los datos necesarios son el Nombre Común del certificado y los Días para Expirar. Este último dato está limitado por el hecho de que ningún certificado puede ser válido durante más tiempo que la CA. En el caso de que estemos usando estos certificados para un servicio como podría ser un servidor de correo, el Nombre Común deberá coincidir con el nombre de dominio del servidor. Por ejemplo, si utilizamos el nombre de dominio hq.zentyal.org para acceder al interfaz de administración web de Zentyal, será necesario un certificado con ese Nombre Común. En el caso de que el certificado sea un certificado de usuario, usaremos normalmente su dirección de correo como Nombre Común.

Opcionalmente se pueden definir Subject Alternative Names [6] para el certificado. Estos sirven para establecer nombres comunes a un certificado, como una dirección de correo para firmar los mensajes de correo electrónico.

Advertencia

Todo certificado que expida la CA recién creada no será reconocido por software de terceros, como navegadores web o clientes de correo. Esto es debido a que la CA no es oficial. No obstante, a pesar de poder obtener mensajes como el de la siguiente imagen, el tráfico estará cifrado.

Mensaje de un navegador web

Mensaje de un navegador web

Truco

Lets Encrypt [7] es una entidad certificadora gratuita que permite generar certificados reconocidos globalmente. En la última sección de este mismo documento encontramos una guía de implementación.

Una vez el certificado haya sido creado, aparecerá en la lista de certificados, estando disponible para el administrador y el resto de módulos. A través de la lista de certificados podemos realizar distintas acciones con ellos:

  • Descargar las claves pública, privada y el certificado.
  • Renovar un certificado.
  • Revocar un certificado.
  • Reexpedir un certificado previamente revocado o caducado.
Listado de certificados

Listado de certificados

El paquete con las claves descargadas contiene también un archivo PKCS12 que incluye la clave privada y el certificado y que puede instalarse directamente en otros programas como navegadores web, clientes de correo, etc.

Si, por ejemplo, descargamos el certificado correspondiente a zentyal.zentyal-domain.lan, podemos comprobar que contiene los siguientes ficheros:

  • zentyal.zentyal-domain.lan.p12 -> Contenedor que almacena tanto el certificado como su clave privada, además del certificado de la Autoridad de Certificación (CA)
  • zentyal.zentyal-domain.lan-cert.crt -> Certificado público.
  • zentyal.zentyal-domain.lan-private-key.pem -> Clave privada del certificado.
  • zentyal.zentyal-domain.lan-public-key.pem -> Clave pública del certificado.
  • zentyal.zentyal-domain.lan-ca-cert.crt -> Certificado de la Autoridad de Certificación (CA)

Si renovamos un certificado, el actual será revocado y uno nuevo con la nueva fecha de expiración será expedido. Y si se renueva la CA, todos los certificados se renovarán con la nueva CA tratando de mantener la antigua fecha de expiración. Si esto no es posible debido a que es posterior a la fecha de expiración de la CA, entonces se establecerá la fecha de expiración de la CA.

Renovar un certificado

Renovar un certificado

Si revocamos un certificado no podremos utilizarlo más, ya que esta acción es permanente y no se puede deshacer. Si lo deseamos, podemos seleccionar la razón para revocar un certificado:

  • unspecified: Motivo no especificado.
  • keyCompromise: La clave privada ha sido comprometida.
  • CACompromise: La clave privada de la autoridad de certificación ha sido comprometida.
  • affilliationChanged: Se ha producido un cambio en la afiliación de la clave pública firmada hacia otra organización.
  • superseded: El certificado ha sido renovado y por tanto, reemplaza al emitido.
  • cessationOfOperation: Cese de operaciones de la entidad certificadora.
  • certificateHold: Certificado suspendido.
  • removeFromCRL: Actualmente sin implementar, da soporte a los CRL diferenciales, es decir, listas de certificados cuyo estado de revocación ha cambiado.
Revocar un certificado

Revocar un certificado

Cuando un certificado expire, el resto de módulos serán notificados. La fecha de expiración de cada certificado se comprueba una vez al día y cada vez que se accede al listado de certificados.

[5]ISO_3166-1: http://es.wikipedia.org/wiki/ISO_3166-1
[6]Para más información sobre los Subject Alternative Names véase: https://en.wikipedia.org/wiki/Subject_Alternative_Name
[7]Let’s Encrypt: https://letsencrypt.org/

Certificados de Servicios

En Autoridad de Certificación ‣ Certificados de Servicios podemos encontrar la lista de módulos de Zentyal que usan certificados para su funcionamiento. Cada módulo genera sus certificados autofirmados, pero podemos remplazar estos certificados por otros emitidos por nuestra CA.

Para cada servicio se puede generar un certificado especificando su Nombre Común. Si no existe un certificado con el nombre especificado, la Autoridad de Certificación lo creará automáticamente.

Certificados de Servicios

Certificados de Servicios

Una vez activado, tendremos que reiniciar el módulo sobre el que hemos activado el certificado para que lo comience a utilizar, al igual que si renovamos el certificado asociado.

Como hemos comentado anteriormente, para la versión segura de varios protocolos (como por ejemplo correo) es importante que el nombre que aparece en el Nombre común del certificado coincida con el nombre que ha solicitado el cliente. Por ejemplo, si nuestro certificado tiene como Nombre común hq.zentyal.org y el cliente teclea mail.hq.zentyal.org, su cliente de correo le mostrará una alerta de seguridad y considerará que el certificado no es válido.

Lista de puntos a comprobar para desplegar un certificado:

  • La autoridad de certificación ha sido creada, el módulo del servicio se ha instalado.
  • Se ha creado un nombre en el DNS para el servicio (Registro A o CNAME), de tal forma que el cliente lo pueda resolver, por ejemplo ‘mail.hq.zentyal.org’.
  • Se ha creado un certificado para el servicio específico, por ejemplo, servidor de correo con un Common Name que coincide con el DNS ‘mail.hq.zentyal.org’. Después de activar el certificado, podremos verlo en Autoridad de Certificación ‣ General.
  • Se han configurado los protocolos seguros para el módulo de correo.
  • Se ha importado el certificado de la CA (no el certificado del servicio específico) en el sistema o en la aplicación del cliente, por ejemplo en el cliente de correo.
  • El usuario configura su cliente de correo apuntando a mail.hq.zentyal.org.
  • El usuario es capaz de resolver la DNS a una dirección IP, el Common Name coincide perfectamente con su petición, y el certificado presentado por el servicio esta firmado por una autoridad de confianza.
  • La aplicación del usuario es capaz de comenzar una sesión segura sin mostrar ningún aviso de seguridad.

Configuración de Let’s Encrypt

Let’s Encrypt [8] es una entidad certificadora sin fines de lucro gestionada por Internet Security Research Group (ISRG), que proporciona certificados X.509 gratuitos para el cifrado de Seguridad de la Capa de Transporte (TLS por sus siglas en inglés). El certificado es válido durante 90 días, durante los cuales la renovación puede tener lugar en cualquier momento. Los certificados están acompañados de un proceso automatizado diseñado para eliminar el complejo proceso de creación manual, validación, firma, instalación y renovación manual de los certificados para sitios web seguros.

Antes de proceder a detallar la configuración de Let’s Encrypt en Zentyal, es conveniente conocer las siguientes consideraciones:

  • El dominio al que se quiere expedir los certificados ha de ser accesible desde Internet.
  • Los puertos 80 y 443 han de estar abiertos para que Let’s Encrypt pueda verificar la información que necesita.
  • Let’s Encrypt es un software de terceros que no está integrado en Zentyal, por lo que cualquier incidencia al respecto será responsabilidad del técnico encargado de gestionar el Servidor Zentyal.
  • Más información sobre Let’s Encrypt aquí [9].

A continuación se procede a detallar los pasos para instalar Let’s Encrypt en Zentyal:

1. Instalamos el software requerido:

sudo apt update
sudo apt install certbot python3-certbot-apache

4. Una vez que Let’s Encrypt está instalado, ya puede procederse a generar los certificados, a continuación se muestra un ejemplo:

certbot --apache -m abraham@zentyal-domain.com

Cuando el certificado haya sido correctamente expedido y almacenado en el Servidor Zentyal, el siguiente paso será indicar a los módulos deseados que usen dicho certificado. A continuación se describen algunas de las rutas más comunes empleadas para establecer el certificado:

  • Para la Interfaz Gráfica de Administración: /usr/share/zentyal/stubs/core/nginx.conf.mas
  • Para el módulo de Correo (SMTP): /usr/share/zentyal/stubs/mail/main.cf.mas
  • Para el módulo de Correo (IMAP/POP): /usr/share/zentyal/stubs/mail/dovecot.conf.mas
  • Para el módulo de Sogo: /etc/apache2/sites-enabled/default-ssl.conf
  • Para el módulo de Jabber: /usr/share/zentyal/stubs/jabber/ejabberd.yml.mas

Advertencia

Hay archivos de configuración que son gestionados por Zentyal, por lo que será necesario realizar los cambios a través de sus plantillas [10] correspondientes.

[8]Let’s Encrypt: https://es.wikipedia.org/wiki/Let%27s_Encrypt
[9]Certbot: https://certbot.eff.org/lets-encrypt/ubuntufocal-apache
[10]Stubs: https://doc.zentyal.org/en/appendix-c.html#stubs