【发布时间】:2021-11-05 18:56:31
【问题描述】:
在使用 OpenSSL 驱动程序配置 rsyslog 客户端以限制用于 TLS 通信的密码套件时需要帮助。
环境:
使用 Photon 3.x 操作系统。以下是 rsyslog 和 openssl 版本的详细信息。
[/]# rpm -qa | grep rsyslog
rsyslog-8.2106.0-1.ph3.x86_64
[/]# openssl version
OpenSSL 1.0.2za-fips 24 Aug 2021
配置:
以下是 TLS 客户端 /etc/rsyslog.d 文件夹下的 rsyslog 配置。
global(
# make ossl driver the default
DefaultNetstreamDriver="ossl"
# certificate files
DefaultNetstreamDriverCAFile="/path/to/syslogCACert.pem"
DefaultNetstreamDriverCertFile="/path/to/syslogClientCert.pem"
DefaultNetstreamDriverKeyFile="/path/to/syslogClientKey.pem"
)
if $programname == ["program-1", "program-2"] then {
action(type="omfwd"
protocol="tcp"
StreamDriver="ossl"
StreamDriverAuthMode="x509/name"
StreamDriverMode="1"
StreamDriverPermittedPeers="server.ca.com"
target="192.168.20.21"
port="6515"
gnutlsPriorityString="Protocol=TLSv1.2
Curves=P-384
ClientSignatureAlgorithms=RSA+SHA384:ECDSA+SHA384
SignatureAlgorithms=RSA+SHA384:ECDSA+SHA384
CipherString=<How to configure>"
)
}
通过上述配置,协议、曲线和签名算法按预期受到限制。参考带有受限曲线和签名算法的wireshark跟踪 - https://i.stack.imgur.com/GmiFs.png
我正在尝试使用以下值限制密码套件
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-SHA384
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES256-SHA384
对于上述 rsyslog 配置文件中的 CipherString 键,我尝试了下面参考文档#4 和文档#5 中列出的各种值。不知何故,我无法让它按预期工作。在 Wireshark 中,我始终可以观察到 rsyslog 向远程 TLS 服务器提供的 53 个密码套件。
以下是我尝试过的一些选项,但似乎没有任何效果。
CipherString=ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384
CipherString=ECDHE-RSA-AES256-GCM-SHA384
CipherString='ECDHE-RSA-AES256-GCM-SHA384'
CipherString=SHA384 # To restrict ciphers with SHA384 only
CipherString='SHA384' # Same as above, but with quotes
CipherString=kECDHE+aRSA+AESGCM+SHA384 # To match the first cipher in above list
CipherString=kECDHE:aRSA:AESGCM:SHA384 # To match the first cipher in above list
CipherString=AESGCM
CipherString=DEFAULT@SECLEVEL=2 # Just to see the if it makes any difference
请建议配置 CipherString 的正确方法。
参考资料:
-
Rsyslog TLS 客户端示例:https://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_client.html
-
Rsyslog 转发输出模块文档:https://www.rsyslog.com/doc/v8-stable/configuration/modules/omfwd.html
-
OpenSSL SSL_CONF_CMD 文档:https://www.openssl.org/docs/man1.0.2/man3/SSL_CONF_cmd.html
-
OpenSSL CipherString 文档:https://www.openssl.org/docs/man1.0.2/man1/ciphers.html
-
关于 FIPS 模式 TLS 的 OpenSSL wiki:https://wiki.openssl.org/index.php/FIPS_mode_and_TLS
更新:也向 rsyslog 团队寻求指导 - https://github.com/rsyslog/rsyslog/issues/4686
【问题讨论】:
-
在黑暗中拍摄,但尝试将 CipherString= before 至少放在其中一个工作项中,看看是否有什么不同?
-
嗨@dave_thompson_085,感谢您对此进行调查。我将
CipherString=移到上面两行(即到Curves=的下一行)并使用以下值进行了测试:'TLSv1.2+FIPS:kRSA+FIPS:!eNULL:!aNULL'和TLSv1.2+FIPS:kRSA+FIPS:!eNULL:!aNULL(取自wiki.openssl.org/index.php/FIPS_mode_and_TLS#TLS_1.2 的值)。但没有任何区别,仍然是相同的行为。