这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

17. 加密

概述

Zabbix支持使用TLS协议v.1.2和1.3(取决于加密库)在Zabbix组件之间进行加密通信。支持证书加密和预共享密钥加密。

可以为连接配置加密:

加密是可选和可配置的单个组件:

  • 一些proxy代理和agent代理可以配置为使用服务器的基于证书的加密,而其他的可以使用基于预共享密钥的加密,而其他的则继续使用未加密的通信(与前面一样)
  • Server (proxy) 可以为不同的主机使用不同的加密配置。

Zabbix守护程序为传入的加密和非加密连接使用一个侦听端口。 添加加密并不需要在防火墙上打开新的端口。

限制因素

  • 私钥以纯文本形式存储在Zabbix组件启动时可读的文件中
  • 预共享密钥在Zabbix前端输入,并以明文形式存储在Zabbix数据库中
  • 内置加密不能保护通信:
    • 运行Zabbix前端的web服务器和用户web浏览器之间
    • Zabbix前端和Zabbix server之间
  • 目前,每个加密连接都使用完整的TLS握手打开,没有实现会话缓存和票据
  • 根据网络延迟,添加加密会增加监控项检查和操作的时间:
    • 例如,如果包延迟100ms,那么打开TCP连接并发送未加密的请求大约需要200ms。 在建立TLS连接时,增加约1000毫秒的加密;
    • 超时可能需要增加,否则在代理上运行远程脚本的某些监控项和操作可能会在未加密的连接中工作,但在加密的连接中超时则会失败。
  • 不支持加密 网络设备自动发现。由网络发现执行的Zabbix agent 检查将不加密,如果Zabbix agent被配置为拒绝未加密的连接,这样的检查将不会成功。

编译支持加密的Zabbix

为了支持加密,Zabbix必须编译并链接到受支持的加密库之一:

  • GnuTLS - 从版本3.1.18
  • OpenSSL - 版本1.0.1, 1.0.2, 1.1.0, 1.1.1
  • LibreSSL - 测试版本 2.7.4, 2.8.2:
    • LibreSSL 2.6.x 是不支持的
    • LibreSSL支持作为OpenSSL的兼容替代品; 新的' tls_*() ' libressl特定的API函数没有被使用。使用LibreSSL编译的Zabbix组件将不能使用PSK,只能使用证书。 通过指定相应的选项来“configure”脚本来选择库:
  • --with-gnutls[=DIR]
  • --with-openssl[=DIR] (也用于LibreSSL)

例如,要用OpenSSL配置server和agent的源文件,你可以使用如下方法:

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

不同的Zabbix组件可以使用不同的加密库进行编译 (例如,服务器上有OpenSSL,代理上有GnuTLS)。

如果您计划使用预共享密钥(PSK),请考虑在使用PSK的Zabbix组件中使用GnuTLSOpenSSL 1.1.0(或更新)库。 GnuTLSOpenSSL 1.1.0库 支持PSK密码套件 向前兼容密码.OpenSSL库的旧版本(1.0.1,1.0.2c)也支持PSK,但可用的PSK密码套件不支持向前兼容密码。

连接加密管理

Zabbix中的连接可以使用:

有两个重要的参数用于指定之间的加密Zabbix组件:

  • TLSConnect -指定对传出连接使用何种加密(未加密、PSK或证书)
  • TLSAccept - 指定允许传入连接的类型(未加密的,PSK或证书)。 可以指定一个或多个值。

TLSConnect 在Zabbix proxy(在主动模式下,仅指定到server的连接)和Zabbix agent(在主动检查中)的配置文件中使用。在Zabbix前端TLSConnect等效的是配置→主机→<一些主机>→加密标签中的连接到主机字段和管理→Proxy代理→<一些proxy代理>→加密标签中的连接到proxy字段。如果为连接配置的加密类型失败,则不会尝试其他加密类型。

TLSAccept 在Zabbix proxy(被动模式,仅指定来自server的连接)和Zabbix agent(被动检查)的配置文件中使用。在Zabbix前端TLSAccept等价的是配置→主机→<一些主机>→加密标签中的主机连接字段和管理→proxy代理→<一些proxy代理>→加密标签中的proxy连接字段。

通常您只为传入加密配置一种类型的加密。 但您可能希望切换加密类型,例如,从未加密切换到基于证书的加密,并尽可能减少停机时间和回滚可能性。 为实现这一目标:

  • 设置 TLSAccept=unencrypted,cert 在agent配置文件中设置,重启Zabbix agent
  • 使用证书测试zabbix_get到agent的连接。如果它能工作,你可以在Zabbix前端的Configuration→Hosts→<some host>→encryption 选项卡中通过将Connections to host设置为“Certificate”来重新配置该agent的加密。
  • 当server配置缓存被更新时(如果主机被proxy监视,则proxy配置被更新),那么到该proxy的连接将被加密
  • 如果一切正常,您可以在agent配置文件中设置' TLSAccept=cert ',并重启Zabbix agent。现在agent将只接受加密的基于证书的连接。 未加密的和基于psk的连接将被拒绝。

以类似的方式,它在server和proxy上工作。 如果在Zabbix前端主机配置来自主机的连接设置为“证书”,那么只有基于证书的加密连接将被接受从agent(主动检查)和Zabbix_sender(trapper监控项)。

最可能的情况是将传入和传出连接配置为使用相同的加密类型或完全不加密。 但在技术上,可以不对称地配置它,例如,对传入连接进行基于证书的加密,对传出连接进行基于psk的加密。

Zabbix前端“Agent加密”列的“配置→主机”中显示各主机的加密配置信息。 例如:

例子 连接到主机 允许连接的主机 拒绝连接的主机
none_none.png 非加密的 非加密的 加密,证书和psk加密
cert_cert.png 加密的,基于证书 加密的, 基于证书 加密的基于PSK
psk_psk.png 加密的, 基于PSK 加密的, 基于PSK 非加密的基于证书加密的
psk_none_psk.png 加密的, 基于PSK 非加密和基于PSK加密 基于证书加密
cert_all.png 加密, 证书加密 未加密, PSK或者or基于证书加密 -

:: noteimportant 默认情况下,连接是不加密的。如果使用加密那么必须分别为每个主机和proxy配置加密。 :::

zabbix_get and zabbix_sender与加密

请参阅zabbix_getzabbix_sender 操作说明使用加密。

密码套件

默认情况下,密码套件是在Zabbix启动期间内部配置的,在Zabbix 4.0.19和4.4.7之前是不能由用户配置的。

从Zabbix 4.0.19,4.4.7开始也支持GnuTLS和OpenSSL用户配置的密码套件。用户可以根据他们的安全策略配置密码套件。使用这个特性是可选的(内置的默认密码套件仍然可以使用)。

对于使用默认设置编译的加密库,Zabbix内置规则通常会导致以下加密套件(按优先级由高到低的顺序):

证书密码套件 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

用户配置密码套件

内置的密码套件选择标准可以被用户配置的密码套件覆盖。

用户配置的密码套件是针对了解TLS密码套件、其安全性和错误后果以及熟悉TLS故障排除的高级用户的特性。

内置的密码套件选择标准可以使用以下参数覆盖:

覆盖范围 参数 描述
证书的密码套件选择 TLSCipherCert13 有效 OpenSSL 1.1.1 cipher strings 对于TLS 1.3协议(它们的值被传递到OpenSSL函数SSL_CTX_set_ciphersuites())。 TLS 1.3的基于证书的加密套件选择标准

仅支持OpenSSL 1.1.1及以上版本。
TLSCipherCert 针对TLS 1.2的有效OpenSSL密码字符串 或有效的GnuTLS优先级字符串。它们的值分别传递给SSL_CTX_set_cipher_list()或gnutls_priority_init()函数。 针对TLS 1.2/1.3 (GnuTLS)、TLS 1.2 (OpenSSL)的基于证书的密码套件选择标准。
Ciphersuite selection for PSK TLSCipherPSK13 有效的OpenSSL 1.1.1密码字符串 对于TLS 1.3协议(它们的值被传递到OpenSSL函数SSL_CTX_set_ciphersuites())。 基于psk的TLS 1.3加密套件选择标准

仅支持OpenSSL 1.1.1及以上版本。
TLSCipherPSK 对于TLS 1.2有效的OpenSSL密码字符串或有效的GnuTLS优先级字符串。它们的值分别传递给SSL_CTX_set_cipher_list()或gnutls_priority_init()函数。 基于psk的TLS 1.2/1.3 (GnuTLS)、TLS 1.2 (OpenSSL)加密套件选择标准。
Combined ciphersuite list for certificate and PSK TLSCipherAll13 TLS 1.3协议的有效的OpenSSL 1.1.1密码字符串(它们的值被传递到OpenSSL函数SSL_CTX_set_ciphersuites())。 TLS 1.3

仅支持OpenSSL 1.1.1及以上版本。
TLSCipherAll 对于TLS 1.2有效的OpenSSL密码字符串或有效的GnuTLS优先级字符串。它们的值分别传递给SSL_CTX_set_cipher_list()或gnutls_priority_init()函数。 针对TLS 1.2/1.3 (GnuTLS)、TLS 1.2 (OpenSSL)的加密套件选择标准.

zabbix_getzabbix_sender工具中覆盖密码套件选择 - 使用命令行参数:

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

新参数为可选参数。 如果没有指定参数,则使用内部的默认值。 如果参数已定义,则它不能为空。

如果加密库中的tlsciphher *值设置失败,则server、proxy或agent将无法启动,并记录一个错误。

理解每个参数何时适用是很重要的。

外部连接

简单例子外部连接:

  • 对于使用证书的外发连接-使用TLSCipherCert13或TLSCipherCert
  • 对于PSK外发连接,使用TLSCipherPSK13和TLSCipherPSK
  • 在zabbix_get和zabbix_sender实用程序中,可以使用命令行参数'——tls-cipher13 '和'——tls-cipher '(加密用'——tls-connect '参数明确指定)
传入连接

对于传入连接来说,这有点复杂,因为规则是特定于组件和配置的。

对 Zabbix agent:

Agent 连接步骤 密码配置
TLSConnect=cert TLSCipherCert, TLSCipherCert13
TLSConnect=psk TLSCipherPSK, TLSCipherPSK13
TLSAccept=cert TLSCipherCert, TLSCipherCert13
TLSAccept=psk TLSCipherPSK, TLSCipherPSK13
TLSAccept=cert,psk TLSCipherAll, TLSCipherAll13

对 Zabbix server 和**proxy** :

连接步骤 密码配置
Outgoing connections using PSK TLSCipherPSK, TLSCipherPSK13
Incoming connections using certificates TLSCipherAll, TLSCipherAll13
Incoming connections using PSK if server has no certificate TLSCipherPSK, TLSCipherPSK13
Incoming connections using PSK if server has certificate TLSCipherAll, TLSCipherAll13

在上面的两个表中可以看到一些模式:

  • TLSCipherAll和TLSCipherAll13只能在使用基于证书 PSK加密套件的组合列表时指定。发生这种情况有两种情况:server(proxy)配置证书(PSK密码套件总是在server、proxy上配置如果加密库支持PSK),agent被配置为接受基于证书和基于PSK的传入连接
  • 在其他情况下,TLSCipherCert和/或TLSCipherPSK*就足够了

下表显示了' TLSCipher* '的内置默认值。 对于您自己的定制值来说,它们可能是一个很好的起点。

参数 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 对于较早的OpenSSL版本(1.0.1,1.0.2,1.1.0),对于LibreSSL和如果在没有PSK支持的情况下编译OpenSSL,默认值是不同的。

用户配置的密码套件示例

请参阅以下用户配置的密码套件示例:

测试密码字符串并只允许PFS密码套件

要查看哪些加密套件已经被选中,你需要在配置文件中设置'DebugLevel=4',或者对zabbix_sender使用' -vv '选项。

在获得所需的密码组之前,可能需要对“TLSCipher”参数进行一些实验。 为了调整“TLSCipher”参数,多次重启Zabbix server、proxy或agent是不方便的。 更方便的选项是使用zabbix_sender或' openssl '命令。 让我们几种都看看如何实现。

1. 使用 zabbix_sender.

让我们做一个测试配置文件,例如/home/zabbix/test.conf,使用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

在本例中,您需要有效的CA和代理证书以及PSK。 为您的环境调整证书和PSK文件路径和名称。

如果你不使用证书,而只使用PSK,你可以制作一个更简单的测试文件:

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

运行zabbix_sender(用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

这里可以看到默认选择的密码套件。 选择这些默认值是为了确保与运行在较早OpenSSL版本(从1.0.1开始)的系统上的Zabbix代理的互操作性。

在较新的系统中,你可以选择通过只允许一些密码套件来加强安全性,例如。 只有PFS(完全向前保密)密码套件。 让我们尝试只允许使用' TLSCipher* '参数的PFS加密套件。

如果使用PSK,结果将无法与使用OpenSSL 1.0.1和1.0.2的系统进行互操作。 基于证书的加密应该可以工作。

添加两行到' test.conf '配置文件:

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

然后再测试一次:

  $ 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        

“证书密码套件”和“PSK密码套件”列表已更改 - 它们比以前短,只包含预期的TLS 1.3加密套件和TLS 1.2 ECDHE-*加密套件。

2. TLSCipherAll和TLSCipherAll13不能被zabbix_sender测试; 它们不会影响上面示例中显示的“证书和PSK密码套件”的值。 要调整TLSCipherAll和TLSCipherAll13,你需要用agent、proxy或server进行实验。

因此,为了只允许PFS密码套件,您可能需要添加最多三个参数

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

如果zabbix_agentd.conf、zabbix_proxy.conf和zabbix_server_conf都配置了证书,并且agent也有PSK。

如果Zabbix环境只使用基于psk的加密并且没有证书,那么只有一个:

  TLSCipherPSK=kECDHEPSK+AES128

现在您已经了解了它的工作原理,您可以在Zabbix之外使用“openssl”命令测试密码套件的选择。 让我们测试三个' 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
         

你可能更喜欢 openssl ciphers 带参数 -V 执行 得到更详细的信息 输出:

  $ 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

类似地,你可以测试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
从AES128 到 AES256转换

Zabbix使用AES128作为数据的内置默认值。让我们假设您正在使用证书,并希望切换到OpenSSL 1.1.1上的AES256。 这可以通过添加相应的参数来实现 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

虽然只使用与证书相关的密码套件,但' TLSCipherPSK* '参数也被定义得很好,以避免它们的默认值包括较不安全的密码,以实现更广泛的互操作性。 不能在server/proxy上完全禁用PSK密码套件。

并且在 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