- Cifrado mediante certificados
Cifrado mediante certificados
Descripción general
Zabbix puede usar certificados RSA en formato PEM, firmados por una autoridad de certificación (CA) pública o interna.
La verificación del certificado se realiza frente a un certificado de CA preconfigurado. Opcionalmente, se pueden usar listas de revocación de certificados (CRL).
Cada componente de Zabbix puede tener configurado solo un certificado.
Para obtener más información sobre cómo configurar y operar una CA interna, generar y firmar solicitudes de certificado, y revocar certificados, consulte tutoriales como el OpenSSL PKI Tutorial v2.0.
Considere y pruebe cuidadosamente las extensiones de su certificado. Para más detalles, consulte Limitaciones al usar extensiones de certificado X.509 v3.
Parámetros de configuración de certificados
Los siguientes parámetros de configuración son compatibles para configurar certificados en los componentes de Zabbix.
| Parameter | Mandatory | Description |
|---|---|---|
| TLSCAFile | yes | Ruta completa de un archivo que contiene los certificados de la CA de nivel superior para la verificación del certificado del par. Si se utiliza una cadena de certificados con varios miembros, ordene los certificados con los certificados de las CA de nivel inferior primero, seguidos por los certificados de las CA de nivel superior. Los certificados de varias CA pueden incluirse en un solo archivo. |
| TLSCRLFile | no | Ruta completa de un archivo que contiene listas de revocación de certificados (CRL). |
| TLSCertFile | yes | Ruta completa de un archivo que contiene el certificado. Si se utiliza una cadena de certificados con varios miembros, ordene los certificados con el certificado del server, proxy o agent primero, seguidos por los certificados de las CA de nivel inferior y, al final, los certificados de las CA de nivel superior. |
| TLSKeyFile | yes | Ruta completa de un archivo que contiene la clave privada. Asegúrese de que este archivo solo sea legible por el usuario de Zabbix estableciendo los permisos de acceso adecuados. |
| TLSServerCertIssuer | no | Emisor permitido del certificado del server. |
| TLSServerCertSubject | no | Asunto permitido del certificado del server. |
Ejemplos de configuración
Después de configurar los certificados necesarios, configure los componentes de Zabbix para usar cifrado basado en certificados.
A continuación se detallan los pasos para configurar:
Zabbix server
1. Prepare el archivo de certificado de la CA.
Para verificar los certificados de los pares, Zabbix server debe tener acceso al archivo que contiene los certificados raíz de CA de nivel superior, 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/cadena de certificados de Zabbix server en un archivo, por ejemplo, en /home/zabbix/zabbix_server.crt.
El primer certificado es el certificado de Zabbix server, seguido del certificado de la CA intermedia:
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-----
Use solo los atributos mencionados arriba para los certificados del cliente y del servidor, a fin de evitar afectar el proceso de verificación del certificado. Por ejemplo, OpenSSL podría no lograr establecer una conexión cifrada si se usan las extensiones X509v3 Subject Alternative Name o Netscape Cert Type. Para obtener más información, consulte Limitations on using X.509 v3 certificate extensions.
3. Coloque la clave privada de Zabbix server 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 TLS en el archivo de configuración de Zabbix server:
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_server.crt
TLSKeyFile=/home/zabbix/zabbix_server.key
Zabbix proxy
1. Prepare los archivos con los certificados CA de nivel superior, el certificado/cadena de certificados de Zabbix proxy y la clave privada, tal como se describe en la sección Zabbix server.
Luego, edite los parámetros TLSCAFile, TLSCertFile y TLSKeyFile en el archivo de configuración de Zabbix proxy en consecuencia.
2. Edite parámetros TLS adicionales en el archivo de configuración de Zabbix proxy:
- Para proxy activo:
TLSConnect=cert - Para proxy pasivo:
TLSAccept=cert
Para mejorar la seguridad del proxy, también puede establecer los parámetros TLSServerCertIssuer y TLSServerCertSubject.
Para obtener más información, consulte Restricción del emisor y el sujeto del certificado permitidos.
Los parámetros TLS en el archivo de configuración final del proxy pueden verse así:
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
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. Configure el cifrado para este proxy en Zabbix frontend:
- Vaya a: Administration > Proxies.
- Seleccione el proxy y haga clic en la pestaña Encryption.
En los ejemplos siguientes, los campos Issuer y Subject están rellenados. Para obtener más información sobre por qué y cómo usar estos campos, consulte Restricción del emisor y el sujeto del certificado permitidos.
Para proxy activo:

Para proxy pasivo:

Zabbix agent
1. Prepare los archivos con los certificados CA de nivel superior, el certificado/cadena de certificados de Zabbix agent y la clave privada, tal como se describe en la sección Zabbix server.
Luego, edite los parámetros TLSCAFile, TLSCertFile y TLSKeyFile en el archivo de configuración de Zabbix agent en consecuencia.
2. Edite los parámetros TLS adicionales en el archivo de configuración de Zabbix agent:
- Para agent activo:
TLSConnect=cert - Para agent pasivo:
TLSAccept=cert
Para mejorar la seguridad de agent, puede establecer los parámetros TLSServerCertIssuer y TLSServerCertSubject.
Para obtener más información, consulte Restricting allowed certificate issuer and subject.
Los parámetros TLS en el archivo de configuración final de agent pueden verse de la siguiente manera. Tenga en cuenta que el ejemplo asume que el host es supervisado por un proxy, por lo que se especifica como el Subject del certificado:
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
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 Zabbix frontend para el host supervisado por este agent.
- Vaya a: Data collection > Hosts.
- Seleccione el host y haga clic en la pestaña Encryption.
En el ejemplo siguiente, los campos Issuer y Subject están completados. Para obtener más información sobre por qué y cómo usar estos campos, consulte Restricting allowed certificate issuer and subject.

Zabbix web service
1. Prepare los archivos con los certificados CA de nivel superior, el certificado/la cadena de certificados de Zabbix web service y la clave privada, tal como se describe en la sección Zabbix server.
Luego, edite los parámetros TLSCAFile, TLSCertFile y TLSKeyFile en el archivo de configuración de Zabbix web service en consecuencia.
2. Edite un parámetro TLS adicional en el archivo de configuración de Zabbix web service: TLSAccept=cert
Los parámetros TLS en el archivo de configuración final de Zabbix web service pueden verse de la siguiente manera:
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_web_service.crt
TLSKeyFile=/home/zabbix/zabbix_web_service.key
3. Configure Zabbix server para conectarse al Zabbix web service configurado con TLS editando el parámetro WebServiceURL en el archivo de configuración de Zabbix server:
WebServiceURL=https://example.com:443/report
Restricción del emisor y sujeto permitidos del certificado
Cuando dos componentes de Zabbix (por ejemplo, server y agent) establecen una conexión TLS, validan los certificados del otro.
Si el 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 caducado y supera otras comprobaciones, entonces la comunicación entre componentes puede continuar.
En este caso más simple, no se verifican el emisor ni el sujeto del certificado.
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 server). Aunque 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 desde el punto de vista de la seguridad.
Si su CA de nivel superior emite certificados que no deben ser aceptados por Zabbix o si desea reducir el riesgo de suplantación, puede restringir los certificados permitidos especificando su emisor y sujeto.
Por ejemplo, en el archivo de configuración de Zabbix proxy, 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 estos ajustes, un proxy activo no se comunicará con un server de Zabbix cuyo certificado tenga un emisor o sujeto diferente. Del mismo modo, un proxy pasivo no aceptará solicitudes de ese server.
Reglas para la coincidencia de cadenas Issuer y Subject
Las reglas para la coincidencia de cadenas Issuer y Subject son las siguientes:
- Las cadenas
IssuerySubjectse 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 de RFC 4514: los 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).
- en cualquier parte de la cadena: '
- Los caracteres nulos (U+0000) no son compatibles. Si se encuentra un carácter nulo, la coincidencia fallará.
- Los estándares RFC 4517 y RFC 4518 no son compatibles.
Por ejemplo, si las cadenas de organización (O) de Issuer y Subject contienen espacios finales y la cadena de unidad organizativa (OU) de Subject contiene comillas dobles, estos caracteres deben escaparse:
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), continuando 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
En cambio, 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 nivel superior (DC) y terminan con el campo de nivel inferior (CN).
El formato con espacios y separadores de campos también varía según las opciones utilizadas, por lo que 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=Development group/CN=Signing CA
subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Zabbix proxy
$ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
Certificate:
...
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 proxy
Para formatear correctamente las cadenas Issuer y Subject 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 será utilizable en los archivos de configuración de Zabbix y en el frontend:
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 certificados X.509 v3
Al implementar certificados X.509 v3 en Zabbix, es posible que algunas extensiones no estén totalmente admitidas o que provoquen un comportamiento inconsistente.
Extensión Subject Alternative Name
Zabbix no admite la extensión Subject Alternative Name, que se utiliza para especificar nombres DNS alternativos, como direcciones IP o direcciones de correo electrónico.
Zabbix solo puede validar el valor del campo Subject del certificado (consulte Restricting Allowed Certificate Issuer and Subject).
Si los certificados incluyen el campo subjectAltName, el resultado de la validación del certificado puede variar según los conjuntos 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 Extended Key Usage
Zabbix admite la extensión Extended Key Usage. Sin embargo, si se utiliza, por lo general es necesario especificar tanto el atributo clientAuth (para la autenticación de cliente WWW TLS) como el atributo serverAuth (para la autenticación de servidor WWW TLS). Por ejemplo:
- En las comprobaciones pasivas, donde el agent de Zabbix actúa como un servidor TLS, el atributo serverAuth debe incluirse en el certificado del agent.
- En las comprobaciones activas, donde el agent actúa como un cliente TLS, el atributo clientAuth debe incluirse en el certificado del agent.
Aunque GnuTLS puede emitir una advertencia por infracciones del uso de claves, normalmente 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 conjuntos de herramientas criptográficas. Asegúrese de que el conjunto de herramientas elegido admita esta extensión. Esta extensión puede impedir que Zabbix cargue certificados CA si esta sección está marcada como crítica, según el conjunto 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 mediante archivos de configuración y se pueden especificar usando el parámetro TLSCRLFile en los archivos de configuración de server, proxy y agent.
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 Zabbix se inicia. Para actualizar la CRL, reinicie Zabbix.
Si los componentes de Zabbix se compilan con OpenSSL y se usan CRL, asegúrese de que cada CA de nivel superior e intermedia en las cadenas de certificados tenga una CRL correspondiente (aunque esté vacía) incluida en TLSCRLFile.
Solución de problemas de certificados
OpenSSL usado con CRL y para algún CA en la cadena de certificados cuya CRL no está incluida en TLSCRLFile
En el registro del server TLS en caso de un par OpenSSL:
failed to accept an incoming connection: from 127.0.0.1: TLS handshake with 127.0.0.1 returned error code 1: \
file s3_srvr.c line 3251: error:14089086: SSL routines:ssl3_get_client_certificate:certificate verify failed: \
TLS write fatal alert "unknown CA"
En el registro del server TLS en caso de un par GnuTLS:
failed to accept an incoming connection: from 127.0.0.1: TLS handshake with 127.0.0.1 returned error code 1: \
file rsa_pk1.c line 103: error:0407006A: rsa routines:RSA_padding_check_PKCS1_type_1:\
block type is not 01 file rsa_eay.c line 705: error:04067072: rsa routines:RSA_EAY_PUBLIC_DECRYPT:paddin
CRL caducada o que caduca durante la operación del server
[OpenSSL]{.underline}, en el log del server:
- antes de la caducidad:
<!-- -->
cannot connect to proxy "proxy-openssl-1.0.1e": TCP successful, cannot establish TLS to [[127.0.0.1]:20004]:\
SSL_connect() returned SSL_ERROR_SSL: file s3_clnt.c line 1253: error:14090086:\
SSL routines:ssl3_get_server_certificate:certificate verify failed:\
TLS write fatal alert "certificate revoked"
- después de la caducidad:
<!-- -->
cannot connect to proxy "proxy-openssl-1.0.1e": TCP successful, cannot establish TLS to [[127.0.0.1]:20004]:\
SSL_connect() returned SSL_ERROR_SSL: file s3_clnt.c line 1253: error:14090086:\
SSL routines:ssl3_get_server_certificate:certificate verify failed:\
TLS write fatal alert "certificate expired"
El punto aquí es que, con una CRL válida, un certificado revocado se informa como "certificate revoked". Cuando la CRL caduca, el mensaje de error cambia a "certificate expired", lo cual es bastante engañoso.
[GnuTLS]{.underline}, en el log del server:
- antes y después de la caducidad, lo mismo:
<!-- -->
cannot connect to proxy "proxy-openssl-1.0.1e": TCP successful, cannot establish TLS to [[127.0.0.1]:20004]:\
invalid peer certificate: The certificate is NOT trusted. The certificate chain is revoked.
Certificado autofirmado, CA desconocida
[OpenSSL]{.underline}, en el log:
error:'self signed certificate: SSL_connect() set result code to SSL_ERROR_SSL: file ../ssl/statem/statem_clnt.c\
line 1924: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:\
TLS write fatal alert "unknown CA"'
Esto se observó cuando el certificado del server, por error, tenía la misma cadena de Issuer y Subject, aunque estaba firmado por una CA. Issuer y Subject son iguales en el certificado CA de nivel superior, pero no pueden ser iguales en el certificado del server. (Lo mismo aplica a los certificados de proxy y agent.)
Para comprobar si un certificado contiene las mismas entradas de Issuer y Subject, ejecute:
openssl x509 -in <yourcertificate.crt> -noout -text
Es aceptable que el certificado raíz (de nivel superior) tenga valores idénticos para Issuer y Subject.