17. 加密
概述
Zabbix支持使用TLS协议v.1.2和1.3(取决于加密库)在Zabbix组件之间进行加密通信。支持证书加密和预共享密钥加密。
可以为连接配置加密:
- Zabbix server,Zabbix proxy,Zabbix agent,Zabbix _sender和Zabbix _get工具
- 到Zabbix数据库从zabbix前端和server/proxy
加密是可选和可配置的单个组件:
- 一些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的源文件,你可以使用如下方法:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl
不同的Zabbix组件可以使用不同的加密库进行编译 (例如,服务器上有OpenSSL,代理上有GnuTLS)。
如果您计划使用预共享密钥(PSK),请考虑在使用PSK的Zabbix组件中使用GnuTLS或OpenSSL 1.1.0(或更新)库。 GnuTLS和OpenSSL 1.1.0库 支持PSK密码套件 向前兼容密码.OpenSSL库的旧版本(1.0.1,1.0.2c)也支持PSK,但可用的PSK密码套件不支持向前兼容密码。
连接加密管理
Zabbix中的连接可以使用:
- 不加密 (默认)
- 基于RSA证书的加密
- 基于PSK基础加密
有两个重要的参数用于指定之间的加密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”中显示各主机的加密配置信息。 例如:
例子 | 连接到主机 | 允许连接的主机 | 拒绝连接的主机 |
---|---|---|---|
非加密的 | 非加密的 | 加密,证书和psk加密 | |
加密的,基于证书 | 加密的, 基于证书 | 加密的基于PSK | |
加密的, 基于PSK | 加密的, 基于PSK | 非加密的基于证书加密的 | |
加密的, 基于PSK | 非加密和基于PSK加密 | 基于证书加密 | |
加密, 证书加密 | 未加密, PSK或者or基于证书加密 | - |
:: noteimportant 默认情况下,连接是不加密的。如果使用加密那么必须分别为每个主机和proxy配置加密。 :::
zabbix_get and zabbix_sender与加密
请参阅zabbix_get和zabbix_sender 操作说明使用加密。
密码套件
在 Zabbix 启动期间,默认情况下内部配置密码套件。
此外,用户配置的密码套件支持 GnuTLS 和 OpenSSL。用户可以根据其安全策略配置密码套件。使用此功能是可选的(内置的默认密码套件仍然有效)。
对于使用默认设置编译的加密库,Zabbix 内置规则通常会生成以下密码套件(按优先级从高到低排列):
Library | Certificate ciphersuites | PSK ciphersuites |
---|---|---|
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_get和zabbix_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=cert | TLSCipherCert, TLSCipherCert13 |
TLSConnect=psk | TLSCipherPSK, TLSCipherPSK13 |
TLSAccept=cert | TLSCipherCert, TLSCipherCert13 |
TLSAccept=psk | TLSCipherPSK, TLSCipherPSK13 |
TLSAccept=cert,psk | TLSCipherAll, TLSCipherAll13 |
对 Zabbix server and proxy:
连接 | Cipher 配置 |
---|---|
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 |
从上面的两个表中可以看出一些模式:
-只有当组合 使用基于证书的和PSK密码套件的列表。那里 发生时有两种情况:Server(Proxy)配置了 证书(PSK密码套件总是在Server、Proxy服务器上配置 如果加密库支持PSK),则代理配置为接受两者 基于证书和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*
参数,以避免其默认值包含为更广泛的互操作性而设计的安全性较低的密码。PSK 密码套件不能在server/proxy上完全禁用。
和在 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