Áú»¢¶Ä²©

Esta es una traducci¨®n de la p¨¢gina de documentaci¨®n original en espa?ol. Ay¨²danos a mejorarla.

17 Cifrado

¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô general

Áú»¢¶Ä²© admite comunicaciones cifradas entre componentes de Áú»¢¶Ä²© mediante el protocolo Transport Layer Security (TLS) v.1.2 y 1.3 (seg¨²n la biblioteca de cifrado). Se admite el cifrado basado en certificados y en claves precompartidas.

El cifrado se puede configurar para conexiones:

El cifrado es opcional y se puede configurar para componentes individuales:

  • Algunos servidores proxy y agentes se pueden configurar para utilizar cifrado basado en certificados con el servidor, mientras que otros pueden utilizar cifrado basado en claves precompartidas y otros contin¨²an con comunicaciones no cifradas (como antes)
  • El servidor (proxy) puede utilizar diferentes configuraciones de cifrado para diferentes hosts

Los programas demonio Áú»¢¶Ä²© utilizan un puerto de escucha para conexiones entrantes cifradas y no cifradas. Agregar un cifrado no requiere abrir nuevos puertos en los firewalls.

Limitaciones

  • Las claves privadas se almacenan en texto plano en archivos legibles por los componentes de Áú»¢¶Ä²© durante el inicio
  • Las claves precompartidas se ingresan en la interfaz de Áú»¢¶Ä²© y se almacenan en la base de datos de Áú»¢¶Ä²© en texto plano
  • El cifrado integrado no protege las comunicaciones:
    • Entre el servidor web que ejecuta el frontend de Áú»¢¶Ä²© y el navegador web del usuario
    • Entre el frontend de Áú»¢¶Ä²© y el servidor de Áú»¢¶Ä²©.
  • Actualmente, cada conexi¨®n cifrada se abre con un protocolo de enlace TLS completo, no se implementa el almacenamiento en cach¨¦ de sesiones y se implementan tickets
  • Agregar cifrado aumenta el tiempo para las comprobaciones y acciones de las m¨¦tricas dependiendo de la latencia de la red:
    • Por ejemplo, si el retraso del paquete es de 100 ms, entonces abrir una conexi¨®n TCP y el env¨ªo de una solicitud no cifrada tardan unos 200 ms. Con el cifrado se a?aden unos 1000 ms para establecer la conexi¨®n TLS;
    • Es posible que sea necesario aumentar los tiempos de espera; de lo contrario, algunas m¨¦tricas y las acciones que ejecutan scripts remotos en agentes pueden funcionar con conexiones no cifradas, pero fallar¨¢n con el tiempo de espera con las cifradas.
  • El cifrado no es compatible con el descubrimiento de red. Los controles del agente Áú»¢¶Ä²© realizados por el descubrimiento de red no estar¨¢n cifrados y si el agente Áú»¢¶Ä²© est¨¢ configurado para rechazar conexiones no cifradas, tales comprobaciones. no tendr¨¢n ¨¦xito.

Compilando Áú»¢¶Ä²© con soporte de cifrado

Para admitir el cifrado, Áú»¢¶Ä²© debe compilarse y vincularse con una de las bibliotecas criptogr¨¢ficas compatibles:

  • GnuTLS - desde la versi¨®n 3.1.18
  • OpenSSL - versiones 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x
  • LibreSSL - probado con las versiones 2.7.4, 2.8.2:
    • LibreSSL 2.6.x no es compatible
    • LibreSSL se admite como reemplazo compatible de OpenSSL; las nuevas funciones API espec¨ªficas de LibreSSL tls_*() no se utilizan. Los componentes de Áú»¢¶Ä²© compilados con LibreSSL no podr¨¢n usar PSK, s¨®lo se pueden utilizar certificados.

Puede obtener m¨¢s informaci¨®n sobre la configuraci¨®n de SSL para la interfaz de Áú»¢¶Ä²© consultando estas mejores pr¨¢cticas.

La biblioteca se selecciona especificando la opci¨®n respectiva en secuencia de comandos "configure":

  • --with-gnutls[=DIR]
  • --with-openssl[=DIR] (also used for LibreSSL)

Por ejemplo, para configurar las fuentes para el servidor y el agente con OpenSSL puede usar algo como:

./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl

Se pueden compilar diferentes componentes de Áú»¢¶Ä²© con diferentes librer¨ªas criptogr¨¢ficas (por ejemplo, un servidor con OpenSSL, un agente con GnuTLS).

Si planea utilizar claves precompartidas (PSK), considere usar bibliotecas GnuTLS o OpenSSL 1.1.0 (o m¨¢s reciente) en los componentes de Áú»¢¶Ä²© que utilizan PSK. Bibliotecas GnuTLS y OpenSSL 1.1.0 admite conjuntos de cifrado PSK con . Las versiones anteriores de la librar¨ªa OpenSSL (1.0.1, 1.0.2c) tambi¨¦n admiten PSK, pero los conjuntos de cifrado PSK disponibles no proporcionan Perfect Forward Secreto.

Gesti¨®n de cifrado de la conexi¨®n

Las conexiones en Áú»¢¶Ä²© pueden usar:

Hay dos par¨¢metros importantes que se utilizan para especificar el cifrado entre componentes de Áú»¢¶Ä²©:

  • TLSConnect: especifica qu¨¦ cifrado utilizar para las conexiones salientes (sin cifrar, PSK o certificado)
  • TLSAccept: especifica qu¨¦ tipos de conexiones est¨¢n permitidas para conexiones entrantes (sin cifrar, PSK o certificado). Se pueden especificar uno o mas valores.

TLSConnect se utiliza en los archivos de configuraci¨®n para el proxy Áú»¢¶Ä²© (en modo activo, especifica solo conexiones al servidor) y el agente Áú»¢¶Ä²© (para controles activos). En la interfaz de Áú»¢¶Ä²©, el equivalente de TLSConnect es el Campo Conexiones al equipo en Recopilaci¨®n de datos ¡ú Equipos ¡ú <alg¨²n equipo> ¡ú pesta?a Cifrado y el campo Conexiones al proxy en Administraci¨®n ¡ú Proxies ¡ú <alg¨²n proxy> ¡ú pesta?a Cifrado. Si el el tipo de cifrado configurado para la conexi¨®n falla, no se probar¨¢n ning¨²n otro tipo de cifrado.

TLSAccept se utiliza en los archivos de configuraci¨®n para el proxy Áú»¢¶Ä²© (en modo pasivo, especifica solo conexiones desde el servidor) y agente Áú»¢¶Ä²© (para controles pasivos). En la interfaz de Áú»¢¶Ä²©, el equivalente de TLSAccept es el Conexiones desde el equipo en Recopilaci¨®n de datos ¡ú Equipos ¡ú <alg¨²n equipo> ¡ú pesta?a Cifrado y el campo Conexiones desde proxy en Administraci¨®n ¡ú Proxies ¡ú <alg¨²n proxy> ¡ú pesta?a Cifrado.

Normalmente se configura s¨®lo un tipo de cifrado para los cifrados de las comunicaciones entrantes. Pero es posible que desee cambiar el tipo de cifrado, p. e. de sin cifrar a basado en certificados con un tiempo de inactividad y reversi¨®n m¨ªnimos. Para lograr esto:

  • Establezca TLSAccept=unencrypted,cert en el archivo de configuraci¨®n del agente y reinicie el agente Áú»¢¶Ä²©
  • Probar la conexi¨®n con zabbix_get al agente mediante certificado. Si funciona, puede reconfigurar el cifrado para ese agente en Áú»¢¶Ä²© frontend en Recopilaci¨®n de datos ¡ú Equipos ¡ú <alg¨²n equipo> ¡ú pesta?a Cifrado configurando Conexiones al equipo en "Certificado".
  • Cuando se actualiza la cach¨¦ de configuraci¨®n del servidor (y la configuraci¨®n del proxy se actualiza si el equipo es monitoreado por proxy) entonces las conexiones a ese agente se cifrar¨¢n
  • Si todo funciona como se esperaba, puede configurar TLSAccept=cert en el archivo de configuraci¨®n del agente y reiniciar el agente Áú»¢¶Ä²©. Ahora el agente aceptar¨¢ ¨²nicamente conexiones cifradas basadas en certificados. Se rechazar¨¢n las conexiones no cifradas y basadas en PSK.

De manera similar funciona en servidor y proxy. Si en la interfaz de Áú»¢¶Ä²© en la configuraci¨®n del equipo Conexiones desde el equipo est¨¢ configurada en "Certificado", luego s¨®lo se aceptar¨¢n conexiones cifradas basadas en certificados desde el agente (verificaciones activas) y zabbix_sender (m¨¦tricas de captura).

Lo m¨¢s probable es que configure las conexiones entrantes y salientes para usar el mismo tipo de cifrado o ning¨²n cifrado. Pero t¨¦cnicamente es posible configurarlo asim¨¦tricamente, p.e. cifrado basado en certificado para conexiones entrantes y basado en PSK para conexiones salientes.

La configuraci¨®n de cifrado para cada equipo se muestra en la interfaz de Áú»¢¶Ä²©, en Recopilaci¨®n de datos ¡ú Equipos en la columna Cifrado del agente. Por ejemplo:

Ejemplo Conexiones al equipo Conexiones permitidas desde el equipo Conexiones rechazadas desde el equipo
none_none.png Sin cifrar Sin cifrar Cifrado, certificado y cifrado basado en PSK
cert_cert.png Cifrado, basado en certificado Cifrado, basado en certificado Sin cifrar y cifrado basado en PSK
psk_psk.png Cifrado, basado en PSK Cifrado, basado en PSK Sin cifrar y cifrado basado en certificado
psk_none_psk.png Cifrado, basado en PSK Sin cifrar y cifrado basado en PSK Cifrado basado en certificado
cert_all.png Cifrado, basado en certificado Sin cifrar, PSK o cifrado basado en certificado -

Las conexiones no est¨¢n cifradas de forma predeterminada. El cifrado debe configurarse para cada equipo y proxy individualmente.

zabbix_get y zabbix_sender con cifrado

Consulte las p¨¢ginas de manual de zabbix_get y zabbix_sender para usarlos con cifrado.

Conjuntos de cifrado

Los Ciphersuites de forma predeterminada se configuran internamente durante el inicio de Áú»¢¶Ä²©.

Tambi¨¦n se admiten conjuntos de cifrado configurados por el usuario para GnuTLS y OpenSSL. Los usuarios pueden configurar conjuntos de cifrado seg¨²n sus pol¨ªticas de seguridad. El uso de esta funci¨®n es opcional (integrado los conjuntos de cifrado predeterminados todav¨ªa funcionan).

Para bibliotecas criptogr¨¢ficas compiladas con la configuraci¨®n predeterminada Áú»¢¶Ä²© incorporada Las reglas generalmente dan como resultado los siguientes conjuntos de cifrado (en orden desde mayor a menor prioridad):

Biblioteca Suites de cifrado de certificados Suites de cifrado PSK
GnuTLS 3.1.18 TLS_ECDHE_RSA_AES_128_GCM_SHA256
TLS_ECDHE_RSA_AES_128_CBC_SHA256
TLS_ECDHE_RSA_AES_128_CBC_SHA1
TLS_RSA_AES_128_GCM_SHA256
TLS_RSA_AES_128_CBC_SHA256
TLS_RSA_AES_128_CBC_SHA1
TLS_ECDHE_PSK_AES_128_CBC_SHA256
TLS_ECDHE_PSK_AES_128_CBC_SHA1
TLS_PSK_AES_128_GCM_SHA256
TLS_PSK_AES_128_CBC_SHA256
TLS_PSK_AES_128_CBC_SHA1
OpenSSL 1.0.2c ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-SHA256
AES128-SHA
PSK-AES128-CBC-SHA
OpenSSL 1.1.0 ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-CCM8
AES128-CCM
AES128-SHA256
AES128-SHA
ECDHE-PSK-AES128-CBC-SHA256
ECDHE-PSK-AES128-CBC-SHA
PSK-AES128-GCM-SHA256
PSK-AES128-CCM8
PSK-AES128-CCM
PSK-AES128-CBC-SHA256
PSK-AES128-CBC-SHA
OpenSSL 1.1.1d TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-CCM8
AES128-CCM
AES128-SHA256
AES128-SHA
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
ECDHE-PSK-AES128-CBC-SHA256
ECDHE-PSK-AES128-CBC-SHA
PSK-AES128-GCM-SHA256
PSK-AES128-CCM8
PSK-AES128-CCM
PSK-AES128-CBC-SHA256
PSK-AES128-CBC-SHA

Conjuntos de cifrado configurados por el usuario

Los criterios de selecci¨®n del conjunto de cifrado incorporado se pueden anular con conjuntos de cifrado configurados por el usuario.

Los conjuntos de cifrado configurados por el usuario son una caracter¨ªstica destinada para usuarios avanzados que entienden los conjuntos de cifrado TLS, su seguridad y consecuencias de los errores y qui¨¦nes se sienten c¨®modos con TLS soluci¨®n de problemas.

Los criterios de selecci¨®n del conjunto de cifrado incorporado se pueden anular utilizando el siguientes par¨¢metros:

Anular alcance ±Ê²¹°ù¨¢³¾±ð³Ù°ù´Ç Valor ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô
Selecci¨®n de conjunto de cifrado para certificados TLSCipherCert13 OpenSSL 1.1.1 [cadenas de cifrado] v¨¢lidas (https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) para el protocolo TLS 1.3 (sus valores se pasan a la funci¨®n OpenSSL SSL_CTX_set_ciphersuites()). Criterios de selecci¨®n de conjunto de cifrado basado en certificados para TLS 1.3

Solo OpenSSL 1.1.1 o posterior.
TLSCipherCert OpenSSL v¨¢lido para TLS 1.2 o GnuTLS v¨¢lido . Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selecci¨®n de conjunto de cifrado basados en certificados para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)
Selecci¨®n de conjunto de cifrado para PSK TLSCipherPSK13 OpenSSL 1.1.1 [cadenas de cifrado] v¨¢lidas (https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) para el protocolo TLS 1.3 (sus valores se pasan a la funci¨®n OpenSSL SSL_CTX_set_ciphersuites()). Criterios de selecci¨®n de conjunto de cifrado basado en PSK para TLS 1.3

Solo OpenSSL 1.1.1 o posterior.
TLSCipherPSK OpenSSL v¨¢lido para TLS 1.2 o GnuTLS v¨¢lido . Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selecci¨®n de conjunto de cifrado basado en PSK para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)
Lista de conjuntos de cifrado combinados para certificado y PSK TLSCipherAll13 OpenSSL 1.1.1 v¨¢lido para el protocolo TLS 1.3 (sus valores se pasan a la funci¨®n OpenSSL SSL_CTX_set_ciphersuites()). Criterios de selecci¨®n de Ciphersuite para TLS 1.3

Solo OpenSSL 1.1.1 o posterior.
TLSCipherAll OpenSSL v¨¢lido para TLS 1.2 o GnuTLS v¨¢lido . Sus valores se pasan a las funciones SSL_CTX_set_cipher_list() o gnutls_priority_init(), respectivamente. Criterios de selecci¨®n de Ciphersuite para TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)

Para anular la selecci¨®n del conjunto de cifrado en zabbix_get y Utilidades zabbix_sender: utilice la par¨¢metros de l¨ªnea de comando:

  • --tls-cipher13 ---tls-cipher

Los nuevos par¨¢metros son opcionales. Si no se especifica un par¨¢metro, el Se utiliza el valor predeterminado interno. Si se define un par¨¢metro, no se puede vac¨ªo.

Si falla la configuraci¨®n de un valor TLSCipher* en la biblioteca criptogr¨¢fica, entonces el servidor, proxy o agente no se inicia y se registra un error.

Es importante comprender cu¨¢ndo es aplicable cada par¨¢metro.

Conexiones salientes

El caso m¨¢s simple son las conexiones salientes:

  • Para conexiones salientes con certificado, utilice TLSCipherCert13 o TLSCifreCert
  • Para conexiones salientes con PSK - utilice TLSCipherPSK13 o TLSCifradoPSK
  • En el caso de las utilidades zabbix_get y zabbix_sender, se pueden utilizar en la l¨ªnea de comandos los par¨¢metros --tls-cipher13 o --tls-cipher (el cifrado se especifica inequ¨ªvocamente con el par¨¢metro --tls-connect)
Conexiones entrantes

Es un poco m¨¢s complicado con las conexiones entrantes porque las reglas son espec¨ªficas para componentes y configuraci¨®n.

Para el agente Áú»¢¶Ä²© :

°ä´Ç²Ô´Ú¾±²µ³Ü°ù²¹³¦¾±¨®²Ô de conexi¨®n del agente °ä´Ç²Ô´Ú¾±²µ³Ü°ù²¹³¦¾±¨®²Ô de cifrado
TLSConnect=cert TLSCipherCert, TLSCipherCert13
TLSConnect=psk TLSCipherPSK, TLSCipherPSK13
TLSAccept=cert TLSCipherCert, TLSCipherCert13
TLSAccept=psk TLSCipherPSK, TLSCipherPSK13
TLSAccept=cert,psk TLSCipherAll, TLSCipherAll13

Para el servidor y proxy Áú»¢¶Ä²©:

°ä´Ç²Ô´Ú¾±²µ³Ü°ù²¹³¦¾±¨®²Ô de conexi¨®n °ä´Ç²Ô´Ú¾±²µ³Ü°ù²¹³¦¾±¨®²Ô de cifrado
Conexiones salientes mediante PSK TLSCipherPSK, TLSCipherPSK13
Conexiones entrantes mediante certificados TLSCipherAll, TLSCipherAll13
Conexiones entrantes usando PSK si el servidor no tiene certificado TLSCipherPSK, TLSCipherPSK13
Conexiones entrantes usando PSK si el servidor tiene certificado TLSCipherAll, TLSCipherAll13

Se puede ver alg¨²n patr¨®n en las dos tablas anteriores:

  • TLSCipherAll y TLSCipherAll13 solo se pueden especificar si se utiliza una lista de conjuntos de cifrado basados en la combinaci¨®n de certificados y PSK. Hay dos casos en los que se produce: servidor (proxy) con un certificado configurado (los conjuntos de cifrado PSK siempre est¨¢n configurados en el servidor, proxy si la biblioteca criptogr¨¢fica admite PSK), agente configurado para aceptar ambas conexiones entrantes basadas en certificados y PSK
  • en otros casos, TLSCipherCert* y/o TLSCipherPSK* son suficientes

Las siguientes tablas muestran los valores predeterminados integrados de TLSCipher*. Podr¨ªan ser un buen punto de partida para sus propios valores personalizados.

±Ê²¹°ù¨¢³¾±ð³Ù°ù´Ç GnuTLS 3.6.12
TLSCipherCert NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
TLSCipherPSK NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL
TLSCipherAll NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
±Ê²¹°ù¨¢³¾±ð³Ù°ù´Ç OpenSSL 1.1.1d 1
TLSCipherCert13
TLSCipherCert EECDH+aRSA+AES128:RSA+aRSA+AES128
TLSCipherPSK13 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
TLSCipherPSK kECDHEPSK+AES128:kPSK+AES128
TLSCipherAll13
TLSCipherAll EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128

1 Los valores predeterminados son diferentes para las versiones anteriores de OpenSSL (1.0.1, 1.0.2, 1.1.0), para LibreSSL y si OpenSSL est¨¢ compilado sin soporte PSK.

Ejemplos de conjuntos de cifrado configurados por el usuario

Vea a continuaci¨®n los siguientes ejemplos de conjuntos de cifrado configurados por el usuario:

Probar cadenas de cifrado y permitir solo conjuntos de cifrado PFS

Para ver qu¨¦ conjuntos de cifrado se han seleccionado, debe configurar 'DebugLevel=4' en el archivo de configuraci¨®n, o usar la opci¨®n -vv para zabbix_sender.

Podr¨ªa ser necesario experimentar con los par¨¢metros TLSCipher* antes de obtener los conjuntos de cifrado deseados. Es inconveniente reiniciar el servidor, proxy o agente Áú»¢¶Ä²© varias veces solo para modificar los par¨¢metros TLSCipher*. Las opciones m¨¢s convenientes son usar zabbix_sender o el comando openssl. Mostremos ambos.

1. Usando zabbix_sender.

Hagamos un archivo de configuraci¨®n de prueba, por ejemplo. /home/zabbix/test.conf, con la sintaxis de un archivo zabbix_agentd.conf:

  Hostname=nonexisting
         ServerActive=nonexisting
         
         TLSConnect=cert
         TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/agent.crt
         TLSKeyFile=/home/zabbix/agent.key
         TLSPSKIdentity=nonexisting
         TLSPSKFile=/home/zabbix/agent.psk

Necesita certificados de agente y CA v¨¢lidos y PSK para este ejemplo. Ajuste las rutas y los nombres de los archivos PSK y certificados para su entorno.

Si no est¨¢ utilizando certificados, sino s¨®lo PSK, puede hacer un archivo de prueba m¨¢s sencillo:

  Hostname=nonexisting
         ServerActive=nonexisting
         
         TLSConnect=psk
         TLSPSKIdentity=nonexisting
         TLSPSKFile=/home/zabbix/agentd.psk

Los conjuntos de cifrado seleccionados se pueden ver ejecutando zabbix_sender (ejemplo compilado con OpenSSL 1.1.d):

  $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA

Aqu¨ª ver¨¢ los conjuntos de cifrado seleccionados de forma predeterminada. Estos valores predeterminados se eligen para garantizar la interoperabilidad con los agentes Áú»¢¶Ä²© que se ejecutan en sistemas con versiones antiguas de OpenSSL (desde 1.0.1).

Con los sistemas m¨¢s nuevos, puede optar por reforzar la seguridad permitiendo solo unos pocos conjuntos de cifrado, p.e. s¨®lo conjuntos de cifrado con PFS (Perfect Forward Secreto). Intentemos permitir solo conjuntos de cifrado con PFS usando los par¨¢metros TLSCipher*.

Si se usa PSK, el resultado no ser¨¢ interoperable con los sistemas que usen OpenSSL 1.0.1 y 1.0.2. El cifrado basado en certificado deber¨ªa funcionar.

Agregue dos l¨ªneas al archivo de configuraci¨®n test.conf:

  TLSCipherCert=EECDH+aRSA+AES128
         TLSCipherPSK=kECDHEPSK+AES128

y pruebe otra vez:

  $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA

Las listas de "conjuntos de cifrado de certificados" y "conjuntos de cifrado PSK" han cambiado - son m¨¢s cortas que antes y solo contienen conjuntos de cifrado TLS 1.3 y conjuntos de cifrado TLS 1.2 ECDHE-* como se esperaba.

2. TLSCipherAll y TLSCipherAll13 no se pueden probar con zabbix_sender; no afectan a los "certificados y conjuntos de cifrado PSK" valor mostrado en el ejemplo anterior. Para modificar TLSCipherAll y TLSCipherAll13 necesita experimentar con el agente, proxy o servidor.

Por lo tanto, para permitir solo conjuntos de cifrado PFS, es posible que deba agregar hasta tres par¨¢metros

  TLSCipherCert=EECDH+aRSA+AES128
         TLSCipherPSK=kECDHEPSK+AES128
         TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128

a zabbix_agentd.conf, zabbix_proxy.conf y zabbix_server_conf si cada uno de ellos tiene un certificado configurado y el agente tambi¨¦n tiene PSK.

Si su entorno Áú»¢¶Ä²© utiliza s¨®lo cifrado basado en PSK y no en certificados, entonces solo uno:

  TLSCipherPSK=kECDHEPSK+AES128

Ahora que comprende c¨®mo funciona, puede probar el conjunto de cifrado. seleccionado incluso fuera de Áú»¢¶Ä²©, con el comando openssl. Vamos a probar los tres valores de par¨¢metro TLSCipher*:

  $ openssl ciphers EECDH+aRSA+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
         $ openssl ciphers kECDHEPSK+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
         $ openssl ciphers EECDH+aRSA+AES128:kECDHEPSK+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
         

Es posible que prefiera ejecutar openssl ciphers con la opci¨®n -V para obtener una informaci¨®n m¨¢s detallada:

  $ openssl ciphers -V EECDH+aRSA+AES128:kECDHEPSK+AES128
                   0x13,0x02 - TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
                   0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
                   0x13,0x01 - TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
                   0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
                   0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
                   0xC0,0x13 - ECDHE-RSA-AES128-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
                   0xC0,0x37 - ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA256
                   0xC0,0x35 - ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA1

De manera similar, puedes probar las cadenas de prioridad para GnuTLS:

  $ gnutls-cli -l --priority=NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
         Cipher suites for NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
         TLS_ECDHE_RSA_AES_128_GCM_SHA256                        0xc0, 0x2f      TLS1.2
         TLS_ECDHE_RSA_AES_128_CBC_SHA256                        0xc0, 0x27      TLS1.2
         
         Protocols: VERS-TLS1.2
         Ciphers: AES-128-GCM, AES-128-CBC
         MACs: AEAD, SHA256
         Key Exchange Algorithms: ECDHE-RSA
         Groups: GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, GROUP-FFDHE8192
         PK-signatures: SIGN-RSA-SHA256, SIGN-RSA-PSS-SHA256, SIGN-RSA-PSS-RSAE-SHA256, SIGN-ECDSA-SHA256, SIGN-ECDSA-SECP256R1-SHA256, SIGN-EdDSA-Ed25519, SIGN-RSA-SHA384, SIGN-RSA-PSS-SHA384, SIGN-RSA-PSS-RSAE-SHA384, SIGN-ECDSA-SHA384, SIGN-ECDSA-SECP384R1-SHA384, SIGN-EdDSA-Ed448, SIGN-RSA-SHA512, SIGN-RSA-PSS-SHA512, SIGN-RSA-PSS-RSAE-SHA512, SIGN-ECDSA-SHA512, SIGN-ECDSA-SECP521R1-SHA512, SIGN-RSA-SHA1, SIGN-ECDSA-SHA1
Cambio de AES128 a AES256

Áú»¢¶Ä²© utiliza AES128 como valor predeterminado para los datos. Supongamos que usted est¨¢n utilizando certificados y desean cambiar a AES256, en OpenSSL 1.1.1.

Esto se puede lograr agregando los par¨¢metros respectivos en zabbix_server.conf:

  TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/server.crt
         TLSKeyFile=/home/zabbix/server.key
         TLSCipherCert13=TLS_AES_256_GCM_SHA384
         TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
         TLSCipherPSK13=TLS_CHACHA20_POLY1305_SHA256
         TLSCipherPSK=kECDHEPSK+AES256:-SHA1
         TLSCipherAll13=TLS_AES_256_GCM_SHA384
         TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384

Aunque s¨®lo se utilizar¨¢n los conjuntos de cifrado relacionados con certificados , los par¨¢metros TLSCipherPSK* tambi¨¦n se definen para evitar sus valores predeterminados que incluyen cifrados menos seguros para una interoperabilidad m¨¢s amplia. Los conjuntos de cifrado PSK no se pueden desactivar completamente en el servidor/proxy.

Y en zabbix_agentd.conf:

  TLSConnect=cert
         TLSAccept=cert
         TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/agent.crt
         TLSKeyFile=/home/zabbix/agent.key
         TLSCipherCert13=TLS_AES_256_GCM_SHA384
         TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384