1 Usando certificados

Descripción general

Zabbix puede utilizar certificados RSA en formato PEM, firmados por una autoridad de certificación (CA) pública o interna.

La verificación de certificados se realiza con un certificado de CA preconfigurado. Opcionalmente, se pueden utilizar Listas de revocación de certificados (CRL).

Cada componente de Zabbix puede tener solo un certificado configurado.

Para obtener más información sobre la configuración y el funcionamiento de una CA interna, la generación y firma de solicitudes de certificados y la revocación de certificados, consulte tutoriales como el Tutorial de PKI de OpenSSL v2.0.

Considere y pruebe cuidadosamente las extensiones de sus certificados. Para obtener más detalles, consulte las limitaciones en el uso de extensiones de certificado X.509 v3.

Parámetros de configuración de certificados

Los siguientes parámetros de configuración son compatibles con la configuración de certificados en los componentes de Zabbix.

Parámetro Obligatorio Descripción
TLSCAFile yes Ruta completa de un archivo que contiene los certificados de las CA de nivel superior para la verificación de certificados de pares.
Si se utiliza una cadena de certificados con varios miembros, ordene primero los certificados con las CA de nivel inferior, seguidos de los certificados con las CA de nivel superior.
Los certificados de varias CA se pueden incluir en un solo archivo.
TLSCRLFile no Ruta completa de un archivo que contiene Listas de revocación de certificados (CRL).
TLSCertFile yes Nombre de ruta completo de un archivo que contiene el certificado.
Si utiliza una cadena de certificados con varios miembros, ordene los certificados con el certificado de servidor, proxy o agente primero, seguido de los certificados de CA de nivel inferior y concluya con los certificados de CA de nivel superior.
TLSKeyFile yes Nombre de ruta completo de un archivo que contiene la clave privada.
Asegúrese de que este archivo solo sea legible por el usuario de Zabbix configurando los derechos de acceso adecuados.
TLSServerCertIssuer no Emisor de certificado de servidor permitido.
TLSServerCertSubject no Asunto de certificado de servidor permitido.

Ejemplos de configuración

Después de configurar los certificados necesarios, configure los componentes de Zabbix para utilizar el cifrado basado en certificados.

A continuación, se detallan los pasos para la configuración:

Servidor Zabbix

1. Prepare el archivo de certificado de CA.

Para verificar los certificados de pares, el servidor Zabbix debe tener acceso al archivo que contiene los certificados raíz de CA de nivel superior y autofirmados. Por ejemplo, si se necesitan certificados de dos CA raíz independientes, colóquelos en un archivo en /home/zabbix/zabbix_ca_file.crt:

Certificate:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
                   ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE
                   ...
       -----BEGIN CERTIFICATE-----
       MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
       ....
       9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO
       -----END CERTIFICATE-----
       Certificate:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
                   ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ....
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE
                   ....       
       -----BEGIN CERTIFICATE-----
       MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB
       ...
       vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY=
       -----END CERTIFICATE-----

2. Coloque el certificado del servidor Zabbix/cadena de certificados en un archivo, por ejemplo, en /home/zabbix/zabbix_server.crt. El primer certificado es el certificado del servidor Zabbix, seguido del certificado de CA intermedio:

Certificate:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
               ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                       ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Digital Signature, Key Encipherment
                   X509v3 Basic Constraints: 
                       CA:FALSE
                   ...
       -----BEGIN CERTIFICATE-----
       MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk
       ...
       h02u1GHiy46GI+xfR3LsPwFKlkTaaLaL/6aaoQ==
       -----END CERTIFICATE-----
       Certificate:
           Data:
               Version: 3 (0x2)
               Serial Number: 2 (0x2)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
               ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE, pathlen:0
               ...
       -----BEGIN CERTIFICATE-----
       MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
       ...
       dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
       -----END CERTIFICATE-----

Utilice solo los atributos mencionados anteriormente para los certificados de cliente y servidor para evitar afectar el proceso de verificación de certificados. Por ejemplo, OpenSSL podría no establecer una conexión cifrada si se utilizan las extensiones X509v3 Subject Alternative Name o Netscape Cert Type. Para obtener más información, consulte Limitaciones en el uso de extensiones de certificado X.509 v3.

3. Coloque la clave privada del servidor Zabbix en un archivo, por ejemplo, en /home/zabbix/zabbix_server.key:

-----BEGIN PRIVATE KEY-----
       MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
       ...
       IJLkhbybBYEf47MLhffWa7XvZTY=
       -----END PRIVATE KEY-----

4. Edite los parámetros de configuración de TLS en el archivo de configuración del servidor Zabbix:

TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSCertFile=/home/zabbix/zabbix_server.crt
       TLSKeyFile=/home/zabbix/zabbix_server.key
Proxy Zabbix

1. Prepare los archivos con los certificados de CA de nivel superior, el certificado/cadena de certificados del proxy Zabbix y la clave privada como se describe en la sección Servidor Zabbix. Luego, edite los parámetros TLSCAFile, TLSCertFile y TLSKeyFile en el archivo de configuración del proxy Zabbix según corresponda.

2. Edite parámetros TLS adicionales en el archivo de configuración del proxy Zabbix:

  • Para el proxy activo: TLSConnect=cert
  • Para el proxy pasivo: TLSAccept=cert

Para mejorar la seguridad del proxy, también puede configurar los parámetros TLSServerCertIssuer y TLSServerCertSubject. Para obtener más información, consulte Restricción de emisores y sujetos de certificados permitidos.

Los parámetros TLS en el archivo de configuración de proxy final pueden verse de la siguiente manera:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSCertFile=/home/zabbix/zabbix_proxy.crt
       TLSKeyFile=/home/zabbix/zabbix_proxy.key

3. Configurar el cifrado para este proxy en la interfaz de Zabbix:

  • Vaya a: Administración → Proxies.
  • Seleccione el proxy y haga clic en la pestaña Cifrado.

En los ejemplos siguientes, los campos Emisor y Asunto están completos. Para obtener más información sobre por qué y cómo utilizar estos campos, consulte Restringir el emisor y el sujeto de certificados permitidos.

Para proxy activo:

Para proxy pasivo:

Agente Zabbix

1. Prepare los archivos con los certificados de CA de nivel superior, el certificado/cadena de certificados del agente Zabbix y la clave privada como se describe en la sección Servidor Zabbix. Luego, edite los parámetros TLSCAFile, TLSCertFile y TLSKeyFile en el archivo de configuración del agente Zabbix según corresponda.

2. Edite parámetros TLS adicionales en el archivo de configuración del agente Zabbix:

  • Para el agente activo: TLSConnect=cert
  • Para el agente pasivo: TLSAccept=cert

Para mejorar la seguridad del agente, puede configurar los parámetros TLSServerCertIssuer y TLSServerCertSubject. Para obtener más información, consulte Restricción de emisores y sujetos de certificados permitidos.

Los parámetros TLS en el archivo de configuración final del agente pueden verse de la siguiente manera. Tenga en cuenta que el ejemplo supone que el equipo está supervisado por un proxy, por lo que se especifica como el sujeto del certificado:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSCertFile=/home/zabbix/zabbix_agentd.crt
       TLSKeyFile=/home/zabbix/zabbix_agentd.key

3. Configure el cifrado en la interfaz de Zabbix para el host supervisado por este agente.

  • Vaya a: Configuración → Equipos.
  • Seleccione el equipo y haga clic en la pestaña Cifrado.

En el ejemplo siguiente, los campos Emisor y Asunto están completos. Para obtener más información sobre por qué y cómo utilizar estos campos, consulte Restricción de emisores y sujetos de certificados permitidos.

Servicio web Zabbix

1. Prepare los archivos con los certificados de CA de nivel superior, el certificado/cadena de certificados del servicio web Zabbix y la clave privada como se describe en la sección Servidor Zabbix. Luego, edite los parámetros TLSCAFile, TLSCertFile y TLSKeyFile en el archivo de configuración del servicio web Zabbix según corresponda.

2. Edite un parámetro TLS adicional en el archivo de configuración del servicio web Zabbix: TLSAccept=cert

Los parámetros TLS en el archivo de configuración final del servicio web pueden verse de la siguiente manera:

TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSCertFile=/home/zabbix/zabbix_web_service.crt
       TLSKeyFile=/home/zabbix/zabbix_web_service.key

3. Configure el servidor Zabbix para conectarse al servicio web Zabbix configurado con TLS editando el parámetro WebServiceURL en el archivo de configuración del servidor Zabbix:

WebServiceURL=https://example.com

Restricción de emisores y sujetos de certificados permitidos

Cuando dos componentes de Zabbix (por ejemplo, servidor y agente) establecen una conexión TLS, validan los certificados de cada uno. Si un certificado de un par está firmado por una CA de confianza (con un certificado de nivel superior preconfigurado en TLSCAFile), es válido, no ha expirado y pasa otras comprobaciones, entonces la comunicación entre los componentes puede continuar. En este caso más simple, el emisor y el sujeto del certificado no se verifican.

Sin embargo, esto presenta un riesgo: cualquiera con un certificado válido puede hacerse pasar por otra persona (por ejemplo, un certificado de host podría usarse para hacerse pasar por un servidor). Si bien esto puede ser aceptable en entornos pequeños donde los certificados están firmados por una CA interna dedicada y el riesgo de suplantación es bajo, puede no ser suficiente en entornos más grandes o más sensibles a la seguridad.

Si su CA de nivel superior emite certificados que Zabbix no debería aceptar o si desea reducir el riesgo de suplantación de identidad, puede restringir los certificados permitidos especificando su emisor y sujeto.

Por ejemplo, en el archivo de configuración del proxy de Zabbix, podría especificar:

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Con esta configuración, un proxy activo no se comunicará con un servidor Zabbix cuyo certificado tenga un emisor o sujeto diferente. De manera similar, un proxy pasivo no aceptará solicitudes de dicho servidor.

Reglas para hacer coincidir las cadenas Issuer y Subject

Las reglas para hacer coincidir las cadenas Issuer y Subject son las siguientes:

  • Las cadenas Issuer y Subject se comprueban de forma independiente. Ambas son opcionales.
  • Una cadena no especificada significa que se acepta cualquier cadena.
  • Las cadenas se comparan tal cual y deben coincidir exactamente.
  • Se admiten caracteres UTF-8. Sin embargo, no se admiten comodines (*) ni expresiones regulares.
  • Se implementan los siguientes requisitos RFC 4514: caracteres que requieren escape (con una barra invertida '\', U+005C):
  • En cualquier parte de la cadena: '"' (U+0022), '+' (U+002B), ',' (U+002C), ';' (U+003B), '<' (U+003C), '>' (U+003E), '\\' (U+005C);
  • Al principio de la cadena: espacio (' ', U+0020) o signo de número ('#', U+0023);
  • Al final de la cadena: espacio (' ', U+0020).
  • No se admiten caracteres nulos (U+0000). Si se incluye un carácter nulo, Si se encuentra, la coincidencia fallará.
  • No se admiten los estándares RFC 4517 y RFC 4518.

Por ejemplo, si las cadenas de organización Issuer y Subject (O) contienen espacios finales y la cadena de unidad organizativa Subject (OU) contiene comillas dobles, estos caracteres deben ser escapados:

TLSServerCertIssuer=CN=Signing CA,OU=Development head,O=\ Example SIA\ ,DC=example,DC=com
       TLSServerCertSubject=CN=Zabbix server,OU=Development group \"5\",O=\ Example SIA\ ,DC=example,DC=com
Orden y formato de los campos

Zabbix sigue las recomendaciones de RFC 4514, que especifica un orden "inverso" para estos campos, comenzando con los campos de nivel más bajo (CN), siguiendo con los campos de nivel medio (OU, O) y concluyendo con los campos de nivel más alto (DC).

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Por el contrario, OpenSSL muestra de forma predeterminada las cadenas Issuer y Subject en orden de nivel superior a nivel inferior. En el siguiente ejemplo, los campos Issuer y Subject comienzan con el campo de nivel superior (DC) y terminan con el campo de nivel inferior (CN). El formato con espacios y separadores de campo también varía según las opciones utilizadas y, por lo tanto, no coincidirá con el formato requerido por Zabbix.

$ openssl x509 -noout -in /home/zabbix/zabbix_proxy.crt -issuer -subject
       issuer= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Grupo de desarrollo/CN=CA firmante
       subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Grupo de desarrollo/CN=Proxy Zabbix
       
       $ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
       Certificado:
       ...
       Emisor: DC=com, DC=zabbix, O=Zabbix SIA, OU=Grupo de desarrollo, CN=CA firmante
       ...
       Asunto: DC=com, DC=zabbix, O=Zabbix SIA, OU=Grupo de desarrollo, CN=Proxy Zabbix

Para formatear Las cadenas Issuer y Subject se configuran correctamente para Zabbix; invoque OpenSSL con las siguientes opciones:

$ openssl x509 -noout -issuer -subject \
       -nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname\
       -in /home/zabbix/zabbix_proxy.crt

La salida estará entonces en orden inverso, separada por comas y se podrá usar en los archivos de configuración y el frontend de Zabbix:

issuer= CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       subject= CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

Limitaciones en el uso de extensiones de certificado X.509 v3

Al implementar certificados X.509 v3 dentro de Zabbix, es posible que ciertas extensiones no sean totalmente compatibles o que generen un comportamiento inconsistente.

Extensión de nombre alternativo del sujeto

Zabbix no admite la extensión Nombre alternativo del sujeto, que se utiliza para especificar nombres DNS alternativos, como direcciones IP o direcciones de correo electrónico. Zabbix solo puede validar el valor en el campo Asunto del certificado (consulte Restricción de emisores y sujetos de certificados permitidos). Si los certificados incluyen el campo subjectAltName, el resultado de la validación del certificado puede variar según los kits de herramientas criptográficas específicos utilizados para compilar los componentes de Zabbix. Como resultado, Zabbix puede aceptar o rechazar certificados en función de estas combinaciones.

Extensión de uso de clave extendido

Zabbix admite la extensión Uso de clave extendido. Sin embargo, si se utiliza, generalmente se requiere que se especifiquen los atributos clientAuth (para la autenticación de cliente WWW TLS) y serverAuth (para la autenticación de servidor WWW TLS). Por ejemplo:

  • En las comprobaciones pasivas, donde el agente Zabbix opera como un servidor TLS, el atributo serverAuth debe incluirse en el certificado del agente.
  • Para las comprobaciones activas, donde el agente opera como un cliente TLS, el atributo clientAuth debe incluirse en el certificado del agente.

Si bien GnuTLS puede emitir una advertencia por violaciones del uso de claves, generalmente permite que la comunicación continúe a pesar de estas advertencias.

Extensión Name Constraints

La compatibilidad con la extensión Name Constraints varía entre los kits de herramientas criptográficas. Asegúrese de que el kit de herramientas elegido admita esta extensión. Esta extensión puede restringir que Zabbix cargue certificados de CA si esta sección está marcada como crítica, según el kit de herramientas específico en uso.

Listas de revocación de certificados (CRL)

Si un certificado se ve comprometido, la autoridad de certificación (CA) puede revocarlo incluyéndolo en una lista de revocación de certificados (CRL). Las CRL se administran a través de archivos de configuración y se pueden especificar utilizando el parámetro TLSCRLFile en los archivos de configuración del servidor, proxy y agente. Por ejemplo:

TLSCRLFile=/home/zabbix/zabbix_crl_file.crt

En este caso, zabbix_crl_file.crt puede contener CRL de varias CA y podría verse así:

-----BEGIN X509 CRL-----
       MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
       ...
       treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
       -----END X509 CRL-----
       -----BEGIN X509 CRL-----
       MIIB+TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
       ...
       CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
       -----END X509 CRL-----

El archivo CRL se carga solo cuando se inicia Zabbix. Para actualizar la CRL, reinicie Zabbix.

Si los componentes de Zabbix se compilan con OpenSSL y se utilizan CRL, asegúrese de que cada CA de nivel superior e intermedio en las cadenas de certificados tenga una CRL correspondiente (incluso si está vacía) incluida en el TLSCRLFile.