Zabbix puede utilizar certificados RSA en formato PEM, firmados por una autoridad certificadora (CA) pública o interna.
La verificación del certificado se realiza contra un certificado de CA preconfigurado. Opcionalmente, se pueden utilizar 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 certificados y revocar certificados, consulte tutoriales como el OpenSSL PKI Tutorial v2.0.
Considere y pruebe cuidadosamente sus extensiones de certificado. Para más detalles, consulte Limitaciones en el uso de extensiones de certificado X.509 v3.
Se admiten los siguientes parámetros de configuración para configurar certificados en los componentes de Zabbix.
Parámetro | Obligatorio | Descripción |
---|---|---|
TLSCAFile | sí | Ruta completa de un archivo que contiene los certificados de la(s) CA(s) de nivel superior para la verificación de certificados de pares. Si se utiliza una cadena de certificados con varios miembros, ordene los certificados colocando primero los certificados de la(s) CA(s) de nivel inferior, seguidos por los certificados de la(s) CA(s) de nivel superior. Los certificados de varias CA pueden incluirse en un solo archivo. |
TLSCRLFile | no | Ruta completa de un archivo que contiene las Listas de Revocación de Certificados (CRL). |
TLSCertFile | sí | Ruta completa de un archivo que contiene el certificado. Si se utiliza una cadena de certificados con varios miembros, ordene los certificados colocando primero el certificado del servidor, proxy o agente, seguido por los certificados de la(s) CA(s) de nivel inferior, y concluyendo con los certificados de la(s) CA(s) de nivel superior. |
TLSKeyFile | sí | Ruta completa de un archivo que contiene la clave privada. Asegúrese de que este archivo sea legible solo por el usuario de Zabbix estableciendo los derechos de acceso apropiados. |
TLSServerCertIssuer | no | Emisor de certificado de servidor permitido. |
TLSServerCertSubject | no | Sujeto de certificado de servidor permitido. |
Después de configurar los certificados necesarios, configure los componentes de Zabbix para utilizar cifrado basado en certificados.
A continuación se detallan los pasos para configurar:
1. Prepare el archivo de certificado de la CA.
Para verificar los certificados de los pares, el servidor Zabbix debe tener acceso al archivo que contiene los certificados de la CA raíz autofirmados de nivel superior. 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 del servidor Zabbix en un archivo, por ejemplo, en /home/zabbix/zabbix_server.crt
. El primer certificado es el del servidor Zabbix, seguido por el 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-----
Utilice únicamente los atributos mencionados anteriormente tanto para los certificados de cliente como de servidor para evitar afectar el proceso de verificación de certificados. Por ejemplo, OpenSSL podría no ser capaz de establecer una conexión cifrada si se utilizan las extensiones X509v3 Subject Alternative Name o Netscape Cert Type. Para 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 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
1. Prepare los archivos con los certificados CA de nivel superior, el certificado/cadena de certificados del proxy de Zabbix y la clave privada como se describe en la sección Servidor de Zabbix. Luego, edite los parámetros TLSCAFile
, TLSCertFile
y TLSKeyFile
en el archivo de configuración del proxy de Zabbix en consecuencia.
2. Edite los parámetros TLS adicionales en el archivo de configuración del proxy de Zabbix:
TLSConnect=cert
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 Restringir emisor y sujeto de certificado permitidos.
Los parámetros TLS en el archivo de configuración final del proxy 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. Configure el cifrado para este proxy en el frontend de Zabbix:
En los ejemplos a continuación, los campos Emisor y Sujeto están rellenados. Para obtener más información sobre por qué y cómo usar estos campos, consulte Restringir emisor y sujeto de certificado permitidos.
Para proxy activo:
Para proxy pasivo:
1. Prepare los archivos con los certificados 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 en consecuencia.
2. Edite los parámetros TLS adicionales en el archivo de configuración del agente Zabbix:
TLSConnect=cert
TLSAccept=cert
Para mejorar la seguridad del agente, puede establecer los parámetros TLSServerCertIssuer
y TLSServerCertSubject
. Para más información, consulte Restringir emisor y sujeto de certificado 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 asume que el equipo es monitorizado por un proxy, por lo que se especifica como el Subject 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 el frontend de Zabbix para el equipo monitorizado por este agente.
En el siguiente ejemplo, los campos Emisor y Sujeto están rellenados. Para más información sobre por qué y cómo utilizar estos campos, consulte Restringir emisor y sujeto de certificado permitidos.
1. Prepare los archivos con los certificados CA de nivel superior, el certificado/cadena de certificados del servicio web de 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 de Zabbix en consecuencia.
2. Edite un parámetro TLS adicional en el archivo de configuración del servicio web de 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 de Zabbix configurado con TLS editando el parámetro WebServiceURL
en el archivo de configuración del servidor Zabbix:
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 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 cualquier otro (por ejemplo, un certificado de equipo podría usarse para hacerse pasar por un servidor). Si bien esto puede ser aceptable en entornos pequeños donde los certificados son 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 no deberían 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 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 estas configuraciones, 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.
Issuer
y Subject
Las reglas para la coincidencia de cadenas Issuer
y Subject
son las siguientes:
Issuer
y Subject
se verifican de forma independiente. Ambas son opcionales.*
) ni expresiones regulares.\
', U+005C):
"
' (U+0022), '+
' (U+002B), ',
' (U+002C), ';
' (U+003B), '<
' (U+003C), '>
' (U+003E), '\\
' (U+005C);#
', U+0023);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
Zabbix sigue las recomendaciones de la RFC 4514, que especifica un orden "inverso" para estos campos, comenzando por 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 contraste, OpenSSL por defecto muestra 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 campos 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=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 utilizable en los archivos de configuración y en 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
Al implementar certificados X.509 v3 dentro de Zabbix, ciertas extensiones pueden no ser totalmente compatibles o podrían resultar en 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 en el campo Subject del certificado (consulte Restringir emisor y sujeto de certificado permitidos). Si los certificados incluyen el campo subjectAltName
, el resultado de la validación del certificado puede variar dependiendo de los toolkits criptográficos 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, generalmente se requiere que se especifiquen ambos atributos clientAuth (para autenticación de cliente TLS WWW) y serverAuth (para autenticación de servidor TLS WWW). Por ejemplo:
Aunque GnuTLS puede emitir una advertencia por violaciones de uso de clave, normalmente permite que la comunicación continúe a pesar de estas advertencias.
Extensión Name Constraints
El soporte para la extensión Name Constraints varía entre los toolkits criptográficos. Asegúrese de que el toolkit elegido admita esta extensión. Esta extensión puede restringir que Zabbix cargue certificados CA si esta sección está marcada como crítica, dependiendo del toolkit específico en uso.
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 gestionan 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:
En este caso, zabbix_crl_file.crt
puede contener CRL de varias CA y podría tener el siguiente aspecto:
-----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 utilizan 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 el TLSCRLFile
.