HAproxy SSL/TLS 警告:默认将 tune.ssl.default-dh-param 设置为 1024

简介

在本教程中,您将学习如何使用本系列开头的如何排除常见HAProxy Errors故障]教程中描述的方法排除故障并将HAProxySetting Tune.ssl.Default-dh-param设置为1024by default警告消息。一旦您确认您的服务器正在生成警告消息,您将学习如何通过将HAProxy的ssl-dh-param-file配置选项设置为使用自定义的dhparams.pem文件来修复该警告消息。

如果HAProxy服务器配置了SSL/TLS证书,并且HAProxy的haproxy.cfg配置文件中未设置tune.ssl. default-dh-param参数,则可能会遇到HAProxy Setting tune. ssl.default-dh-param to 1024 by default警告消息。如果未设置该参数,HAProxy将默认为TLS握手的Diffie-Hellman密钥协商部分的1024位值,这被认为是不安全的

您的HAProxy服务器可能会在您不知情的情况下触发此警告。您可以配置一个SSL/TLS证书,HAProxy将运行,但服务器可能会在后台警告您该问题。如果您不确定您的HAProxy服务器是否默认使用1024bit Diffie-Hellman参数,您可以使用像SSLLabs服务器测试)这样的工具来为您检查。如果您收到的报告中包含一行此服务器支持弱Diffie-Hellman(DH)密钥交换参数,则表示您的HAProxy服务器受到影响。

如果您已经确定您的HAProxy服务器正在生成有关tune.ssl.default-dh-param设置的警告,并且您想跳过故障排除,请参阅本教程末尾的解决secure Tune.ssl.Default-dh-param警告部分,说明如何修复该问题。

使用systemctl检查tune.ssl.default-dh-para警告

按照本系列开头的如何排除常见HAProxy Errors故障]教程中的故障排除步骤,对Setting Tune.ssl.Default-dh-param to 1024by default警告消息进行故障排除的第一步是使用systemctl检查HAProxy的状态。

systemctl status的输出可能包含解决错误所需的所有诊断信息。但是,重要的是要检查`haproxy‘服务的当前状态,以确保它正在运行,并且在您解决该警告时,依赖它的任何服务仍然能够运行。

使用此systemctl命令检查HAProxy在任何Linux发行版上的状态:

1sudo systemctl status haproxy.service -l --no-pager

-l标志将确保systemctl输出一行的全部内容,而不是用省略号()用于排长队。--no-pager标志会将整个日志输出到您的屏幕上,而不会调用像less这样的工具,该工具一次只显示一屏内容。

由于您正在对Setting Tune.ssl.default-dh-param to 1024 by default警告消息进行故障排除,您应该会收到类似于以下内容的输出:

 1[secondary_label Output]
 2 haproxy.service - HAProxy Load Balancer
 3   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)
 4   Active: active (running) since Tue 2020-10-06 14:31:39 UTC; 2min 31s ago
 5  Process: 71406 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS)
 6 Main PID: 71407 (haproxy)
 7. . .
 8
 9Oct 06 14:31:39 bb9fb4c53743 systemd[1]: Starting HAProxy Load Balancer...
10Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : parsing [/etc/haproxy/haproxy.cfg:69] : 'bind *:5000' :
11Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]:   unable to load default 1024 bits DH parameter for certificate '/etc/haproxy/fullchain.pem'.
12Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]:   , SSL library will use an automatically generated DH parameter.
13Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.
14Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy main started.
15Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy static started.
16Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy app started.
17Oct 06 14:31:39 bb9fb4c53743 systemd[1]: Started HAProxy Load Balancer.

此输出中有两个重要的突出显示部分需要注意。第一行是Active(Running)行,表示HAProxy可用且正在运行。如果您的服务器显示Active:Failed这样的行,则需要使用本系列开头的[如何排除常见HAProxy故障]教程中介绍的方法对HAProxy进行故障排除。

第二组突出显示的行来自systemd日志,包含tune.ssl.default-dh-param警告。这些行提供了有关警告、如何触发警告、HAProxy采取的步骤以及如何解决警告的所有信息。

如果您的systemctl输出中包含带有Tune.ssl.Default-dh-para警告的行,请跳到本教程末尾的解析Tune.ssl.Default-dh-parumWarning部分,了解如何使用更安全的值配置HAProxy。

否则,如果您的systemctl输出没有提供有关警告的特定信息,但您知道您的服务器正在使用弱的Diffie-Hellman参数,本教程的下一节将指导您使用Journal alctl日志来定位警告消息。

使用Journal alctl检查tune.ssl.default-dh-para警告

如果您的systemctl输出不包括tune.ssl.default-dh-param警告,但您知道您的服务器受到了影响,则应继续使用Journal alctl命令检查systemd日志中的HAProxy。

在任何Linux发行版上运行以下命令,以检查haproxy服务的systemd日志:

1sudo journalctl -u haproxy.service -l --no-pager | grep tune.ssl.default-dh-param

命令的|grep tune.ssl.default-dh-param部分使用管道(|)将Journal alctl的输出作为输入发送到grep命令。使用管道意味着只有日记帐中匹配的行才会显示在屏幕上。

如果日志包含tune.ssl.default-dh-para警告,则您将收到如下输出:

1[secondary_label Output]
2Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.

由于此输出包含警告,您可以跳到本教程末尾的[设置安全的Tune.ssl.Default-dh-parumValue](# setting-a-secure-tune-ssl-default-dh-param-value)部分,以了解如何为HAProxy配置更安全的值。

如果您在运行Journal altcl命令后没有收到任何输出,下一节将介绍如何使用HAProxy的内置配置检查工具来检查tune.ssl.default-dh-param警告。

使用haproxy -c或日志文件检查tune.ssl.default-dh-param警告

HAProxy包含一个可以检查和验证其配置文件的命令。您可以使用该命令检查语法错误或无效设置,而无需重新启动HAProxy并冒着服务停机的风险。此外,如果您的HAProxy服务器配置为将输出记录到文件或系统日志中,则可以检查日志文件以检查是否有tune.ssl.default-dh-param警告。

要使用HAProxy本身检查tune.ssl.default-dh-param警告,请在任何Linux发行版上运行以下命令。如果您的HAProxy配置文件位于与突出显示的/etc/haxy/haproxy.cfg路径不同的位置,请确保替换为您的文件的正确路径:

1sudo haproxy -c -f /etc/haproxy/haproxy.cfg

如果您的服务器配置了SSL/TLS,并且没有设置Tune.ssl.default-dh-param,则您将收到类似于以下内容的警告输出:

1[secondary_label Output]
2[WARNING] 279/150829 (71512) : parsing [/etc/haproxy/haproxy.cfg:69] : 'bind *:5000' :
3  unable to load default 1024 bits DH parameter for certificate '/etc/haproxy/fullchain.pem'.
4  , SSL library will use an automatically generated DH parameter.
5[WARNING] 279/150829 (71512) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.
6Configuration file is valid

突出显示的行包含Tune.ssl.Default-dh-param警告。

要使用HAProxy的日志检查警告消息,可以使用grep命令搜索与tune.ssl.default-dh-param字符串匹配的行。运行以下命令以检查警告:

1sudo grep tune.ssl.default-dh-param /var/log/haproxy.log

请注意,如果您使用不同的日志位置配置了HAProxy,请务必将突出显示的/var/log/haproxy.log文件替换为您的路径。

如果您的服务器正在生成警告,则您将收到如下输出:

1[secondary_label Output]
2Oct 6 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.

<$>[备注] 注意 :您的日志文件可能不包含警告信息,但haproxy-c命令仍会生成警告信息。如果是这种情况,那么您的HAProxy服务很可能已经运行了足够长的时间,以至于日志文件被轮换,因此它不包括警告。

使用haproxy-c方法检查消息是确定您的服务器是否受到影响的最可靠方式,因此您可以安全地忽略丢失的日志文件条目。 <$>

现在,您已经确定您的服务器是否正在生成tune.ssl.default-dh-param警告,您可以继续本教程的下一步,其中解释了两种可以用来解决问题的方法。

解析tune.ssl.default-dh-param警告

您可以通过几个不同的设置来解决HAProxy中的tune.ssl.default-dh-param警告。一种选择是根据警告消息在/etc/haxy/haproxy.cfg中将tune.ssl.default-dh-param值显式设置为大于1024的值。然而,HAProxy documentation建议指定定制的Diffie-Hellman参数,因为该方法更安全,所以我们将使用该方法。

首先,您将使用openssl实用程序生成一个dhparams.pem文件。创建该文件后,您将把它添加到您的全局HAProxy配置节中,以便任何Frontend块都将继承该设置。

要生成自定义的dh参数,请运行以下命令:

1sudo openssl dhparam -out /etc/haproxy/dhparams.pem 2048

您将收到如下所示的输出:

1[secondary_label Output]
2Generating DH parameters, 2048 bit long safe prime, generator 2
3This is going to take a long time
4..............

命令完成后,配置HAProxy以使用自定义DH参数文件。在vi或您喜欢的编辑器中打开/etc/haproxy/haproxy.cfg

1sudo vi /etc/haproxy/haproxy.cfg

在文件中查找该节,如下所示:

1[secondary_label Output]
2. . .
3    # turn on stats unix socket
4    stats socket /var/lib/haproxy/stats
5
6    # utilize system-wide crypto-policies
7    #ssl-default-bind-ciphers PROFILE=SYSTEM
8    ssl-default-server-ciphers PROFILE=SYSTEM

现在,在ssl-default-server-ciphers profile=SYSTEM行后面添加一行,如下所示:

1ssl-dh-param-file /etc/haproxy/dhparams.pem

整个部分应该类似于以下内容,包括您添加的新突出显示的ssl-dh-param-file行:

1[secondary_label /etc/haproxy/haproxy.cfg]
2. . .
3    # turn on stats unix socket
4    stats socket /var/lib/haproxy/stats
5
6    # utilize system-wide crypto-policies
7    #ssl-default-bind-ciphers PROFILE=SYSTEM
8    ssl-default-server-ciphers PROFILE=SYSTEM
9    ssl-dh-param-file /etc/haproxy/dhparams.pem

编辑完成后,按ESC保存并关闭文件,键入:wq,然后按Enter

使用haproxy-c命令测试配置,确保您添加了正确的设置,并且HAProxy可以访问自定义的dhparams.pem文件:

1sudo haproxy -c -f /etc/haproxy/haproxy.cfg

您应该会收到如下所示的输出,说明配置有效:

1[secondary_label Output]
2Configuration file is valid

如果您的配置有效,请重新启动HAProxy,使其使用新的Diffie-Hellman参数文件:

1sudo systemctl restart haproxy.service

现在,您已经使用2048位的自定义Diffie-Hellman参数集配置了HAProxy,所有前端都将能够使用这些参数。您还抑制了tune.ssl.default-dh-para警告。

结论

在本教程中,您学习了如何排除HAProxySetting Tune.ssl.Default-dh-param to 1024 by default警告消息的故障。您探索了四种不同的方法来检查HAProxy的配置以查找消息。首先,您使用systemctlJournal alctl检查HAProxy服务器的状态,并尝试在systemd日志中查找消息。然后,您使用内置的haproxy-c配置检查检查了HAProxy配置文件。最后,您在HAProxy的日志文件上使用grep命令检查了日志条目。

在确认服务器正在生成默认情况下将tune.ssl.default-dh-param设置为1024警告消息后,您生成了一个自定义Diffie-Hellman参数文件,并通过设置ssl-dh-param-file配置指令将HAProxy配置为使用该文件。

现在您已经准备好了该配置,您的HAProxy服务器将默认使用更安全的Diffie-Hellman参数,并且您的日志中将不再有tune.ssl.default-dh-param警告消息。

Published At
Categories with 技术
Tagged with
comments powered by Disqus