Rsyslog客户端TLS连接时Client Hello cipher套件过多问题求助
问题描述
已配置Rsyslog over TLS,但Debian与Redhat 8机器均出现客户端Hello消息发送过多密码套件的情况:
- Rsyslog版本:8.2404
- GnuTLS版本:3.7.1
- 当前客户端Hello暴露31个密码套件,抓包可见该现象
服务器配置
$DefaultNetstreamDriver gtls $DefaultNetstreamDriverCAFile /etc/rsyslog-keys/ca.pem $DefaultNetstreamDriverCertFile /etc/rsyslog-keys/server-cert.pem $DefaultNetstreamDriverKeyFile /etc/rsyslog-keys/server-key.pem $ModLoad imtcp $InputTCPServerStreamDriverMode 1 $InputTCPServerStreamDriverAuthMode anon $InputTCPServerRun 6514
客户端配置
$DefaultNetstreamDriverCAFile /etc/pki/tls/private/ca.pem $DefaultNetstreamDriverCertFile /etc/pki/tls/private/client-cert.pem $DefaultNetstreamDriverKeyFile /etc/pki/tls/private/client-key.pem $DefaultNetStreamDriver gtls $ActionSendStreamDriverMode 1 $ActionSendStreamDriverAuthMode anon
*.* @@<ip>:6514
已尝试修改rsyslog配置、调整Gnutls优先级字符串等方法但均无效,如何将密码套件数量限制为指定数量?
解决方案
要限制Rsyslog通过GnuTLS使用的密码套件数量,需在服务器端和客户端的rsyslog配置中正确指定GnuTLS优先级字符串,注意配置项的位置和语法:
1. 添加密码套件优先级配置
在服务器和客户端的rsyslog配置中,添加$DefaultNetstreamDriverPriorityString配置项,必须放在$DefaultNetstreamDriver gtls之后、其他流驱动配置之前,否则不会生效。
服务器端修改示例
$DefaultNetstreamDriver gtls # 指定仅允许的密码套件,示例为TLS 1.2/1.3的安全套件 $DefaultNetstreamDriverPriorityString "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM:+CHACHA20-POLY1305:+AES-128-GCM" $DefaultNetstreamDriverCAFile /etc/rsyslog-keys/ca.pem $DefaultNetstreamDriverCertFile /etc/rsyslog-keys/server-cert.pem $DefaultNetstreamDriverKeyFile /etc/rsyslog-keys/server-key.pem $ModLoad imtcp $InputTCPServerStreamDriverMode 1 $InputTCPServerStreamDriverAuthMode anon $InputTCPServerRun 6514
客户端修改示例
$DefaultNetStreamDriver gtls # 与服务器端保持一致的优先级配置,确保套件匹配 $DefaultNetstreamDriverPriorityString "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM:+CHACHA20-POLY1305:+AES-128-GCM" $DefaultNetstreamDriverCAFile /etc/pki/tls/private/ca.pem $DefaultNetstreamDriverCertFile /etc/pki/tls/private/client-cert.pem $DefaultNetstreamDriverKeyFile /etc/pki/tls/private/client-key.pem $ActionSendStreamDriverMode 1 $ActionSendStreamDriverAuthMode anon *.* @@<ip>:6514
2. 优先级字符串语法说明
GnuTLS的优先级字符串可精确控制协议版本和密码套件:
NORMAL:基础安全配置集:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3:禁用所有协议,仅启用TLS1.2和TLS1.3:-CIPHER-ALL:+AES-256-GCM:+CHACHA20-POLY1305:+AES-128-GCM:禁用所有套件,仅保留指定的3个安全套件
可根据需求调整套件列表,比如只保留AES-256-GCM,删除其他套件即可。
3. 验证配置
- 重启rsyslog服务:
- Debian/Ubuntu:
systemctl restart rsyslog - Redhat 8:
systemctl restart rsyslog
- Debian/Ubuntu:
- 再次抓包,查看客户端Hello中的密码套件数量是否符合预期
- 用
gnutls-cli工具测试连接,验证可用套件:gnutls-cli --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM:+CHACHA20-POLY1305:+AES-128-GCM" <server-ip>:6514
常见排查点
- 确认
$DefaultNetstreamDriverPriorityString的位置在$DefaultNetstreamDriver gtls之后 - 检查GnuTLS版本是否支持指定的套件(GnuTLS 3.7.1支持上述示例中的所有套件)
- 确保客户端与服务器端的优先级配置一致,否则可能导致连接失败
内容的提问来源于stack exchange,提问作者Chandra Teja
相关产品推荐
相关产品推荐

