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,3.0.x
  • 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的源文件,你可以使用如下方法:

  1. ./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等效的是Data collection → Hosts → <some host> → Encryption tab and the Connections to proxy 标签中的连接到主机字段和Administration → Proxies → <some proxy> → Encryption标签中的连接到proxy字段。如果为连接配置的加密类型失败,则不会尝试其他加密类型。

TLSAccept 在Zabbix proxy(被动模式,仅指定来自server的连接)和Zabbix agent(被动检查)的配置文件中使用。在Zabbix前端TLSAccept等价的是Data collection → Hosts → <some host> → Encryption标签中的主机连接字段和Administration → Proxies → <some proxy> → Encryption标签中的proxy连接字段。

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

  • 设置 TLSAccept=unencrypted,cert 在agent配置文件中设置,重启Zabbix agent
  • 使用证书测试zabbix_get到agent的连接。如果它能工作,你可以在Zabbix前端的Data collection → 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加密”列的“Data collection → Hosts”中显示各主机的加密配置信息。 例如:

例子连接到主机允许连接的主机拒绝连接的主机
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 启动期间,默认情况下内部配置密码套件。

此外,用户配置的密码套件支持 GnuTLS 和 OpenSSL。用户可以根据其安全策略配置密码套件。使用此功能是可选的(内置的默认密码套件仍然有效)。

对于使用默认设置编译的加密库,Zabbix 内置规则通常会生成以下密码套件(按优先级从高到低排列):

LibraryCertificate ciphersuitesPSK ciphersuites
GnuTLS 3.1.18TLS_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.2cECDHE-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.0ECDHE-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.1dTLS_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 PSKTLSCipherPSK13有效的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 PSKTLSCipherAll13TLS 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 连接步骤Cipher 配置
TLSConnect=certTLSCipherCert, TLSCipherCert13
TLSConnect=pskTLSCipherPSK, TLSCipherPSK13
TLSAccept=certTLSCipherCert, TLSCipherCert13
TLSAccept=pskTLSCipherPSK, TLSCipherPSK13
TLSAccept=cert,pskTLSCipherAll, TLSCipherAll13

对 Zabbix server and proxy:

连接Cipher 配置
Outgoing connections using PSKTLSCipherPSK, TLSCipherPSK13
Incoming connections using certificatesTLSCipherAll, TLSCipherAll13
Incoming connections using PSK if server has no certificateTLSCipherPSK, TLSCipherPSK13
Incoming connections using PSK if server has certificateTLSCipherAll, TLSCipherAll13

从上面的两个表中可以看出一些模式:

-只有当组合 使用基于证书的PSK密码套件的列表。那里 发生时有两种情况:Server(Proxy)配置了 证书(PSK密码套件总是在Server、Proxy服务器上配置 如果加密库支持PSK),则代理配置为接受两者 基于证书和PSK的传入连接 -在其他情况下,TLSCipherCert和/或TLSCipherPSK就足够了

下表显示了“TLSCipher*”内置默认值。他们 可能是您自己的自定义值的一个很好的起点。

参数GnuTLS 3.6.12
TLSCipherCertNONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
TLSCipherPSKNONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL
TLSCipherAllNONE:+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
TLSCipherCertEECDH+aRSA+AES128:RSA+aRSA+AES128
TLSCipherPSK13TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
TLSCipherPSKkECDHEPSK+AES128:kPSK+AES128
TLSCipherAll13
TLSCipherAllEECDH+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文件的规则:

  1. Hostname=nonexisting
  2. ServerActive=nonexisting
  3. TLSConnect=cert
  4. TLSCAFile=/home/zabbix/ca.crt
  5. TLSCertFile=/home/zabbix/agent.crt
  6. TLSKeyFile=/home/zabbix/agent.key
  7. TLSPSKIdentity=nonexisting
  8. TLSPSKFile=/home/zabbix/agent.psk

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

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

  1. Hostname=nonexisting
  2. ServerActive=nonexisting
  3. TLSConnect=psk
  4. TLSPSKIdentity=nonexisting
  5. TLSPSKFile=/home/zabbix/agentd.psk

运行zabbix_sender(用OpenSSL 1.1.d编译的例子)可以看到所选的密码套件:

  1. $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
  2. 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
  3. 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
  4. 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 ‘配置文件:

  1. TLSCipherCert=EECDH+aRSA+AES128
  2. TLSCipherPSK=kECDHEPSK+AES128

然后再测试一次:

  1. $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
  2. 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
  3. 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
  4. 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密码套件,您可能需要添加最多三个参数

  1. TLSCipherCert=EECDH+aRSA+AES128
  2. TLSCipherPSK=kECDHEPSK+AES128
  3. TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128

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

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

  1. TLSCipherPSK=kECDHEPSK+AES128

现在您已经了解了它的工作原理,您可以在Zabbix之外使用“openssl”命令测试密码套件的选择。 让我们测试三个’ TLSCipher* ‘参数值:

  1. $ openssl ciphers EECDH+aRSA+AES128 | sed 's/:/ /g'
  2. 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
  3. $ openssl ciphers kECDHEPSK+AES128 | sed 's/:/ /g'
  4. TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
  5. $ openssl ciphers EECDH+aRSA+AES128:kECDHEPSK+AES128 | sed 's/:/ /g'
  6. 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 执行 得到更详细的信息 输出:

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

类似地,你可以测试GnuTLS的优先级字符串:

  1. $ 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
  2. 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
  3. TLS_ECDHE_RSA_AES_128_GCM_SHA256 0xc0, 0x2f TLS1.2
  4. TLS_ECDHE_RSA_AES_128_CBC_SHA256 0xc0, 0x27 TLS1.2
  5. Protocols: VERS-TLS1.2
  6. Ciphers: AES-128-GCM, AES-128-CBC
  7. MACs: AEAD, SHA256
  8. Key Exchange Algorithms: ECDHE-RSA
  9. Groups: GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, GROUP-FFDHE8192
  10. 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:

  1. TLSCAFile=/home/zabbix/ca.crt
  2. TLSCertFile=/home/zabbix/server.crt
  3. TLSKeyFile=/home/zabbix/server.key
  4. TLSCipherCert13=TLS_AES_256_GCM_SHA384
  5. TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
  6. TLSCipherPSK13=TLS_CHACHA20_POLY1305_SHA256
  7. TLSCipherPSK=kECDHEPSK+AES256:-SHA1
  8. TLSCipherAll13=TLS_AES_256_GCM_SHA384
  9. TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384

虽然只会使用与证书相关的密码套件,但也定义了 TLSCipherPSK* 参数,以避免其默认值包含为更广泛的互操作性而设计的安全性较低的密码。PSK 密码套件不能在server/proxy上完全禁用。

和在 zabbix_agentd.conf:

  1. TLSConnect=cert
  2. TLSAccept=cert
  3. TLSCAFile=/home/zabbix/ca.crt
  4. TLSCertFile=/home/zabbix/agent.crt
  5. TLSKeyFile=/home/zabbix/agent.key
  6. TLSCipherCert13=TLS_AES_256_GCM_SHA384
  7. TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384