简介
在本教程中,您将学习如何使用本系列开头的如何排除常见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-parum
Warning部分,了解如何使用更安全的值配置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-parum
Value](# 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的配置以查找消息。首先,您使用systemctl
和Journal 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
警告消息。