该系列的一部分:
常见的 HAProxy 错误
本教程系列介绍了如何对您在使用HAProxy TCP 和 HTTP 代理服务器时可能遇到的一些最常见错误进行故障排除和修复。
本系列中的每个教程都包含对常见 HAProxy 配置、网络、文件系统或权限错误的描述。该系列首先概述了可用于对 HAProxy 进行故障排除的命令和日志文件。后续教程详细检查特定错误。
介绍
在本教程中,您将学习如何Setting tune.ssl.default-dh-param to 1024 by default使用本系列开头的如何对常见 HAProxy 错误进行故障排除教程中描述的方法对 HAProxy警告消息进行故障排除和修复。如果您确认您的服务器正在生成警告消息,您将学习如何通过将 HAProxy 的ssl-dh-param-file配置选项设置为使用自定义dhparams.pem文件来修复它。
Setting tune.ssl.default-dh-param to 1024 by default当您的 HAProxy 服务器配置了 SSL/TLS 证书并且该tune.ssl.default-dh-param参数未在 HAProxy 的haproxy.cfg配置文件中设置时,您可能会遇到 HAProxy警告消息。未设置该参数时,HAProxy 将默认为 TLS 握手的 Diffie-Hellman 密钥协商部分的值 1024 位,这被认为是不安全的。
您的 HAProxy 服务器可能会在您不知情的情况下触发此警告。您可以配置 SSL/TLS 证书并且 HAProxy 将运行,但服务器可能会在后台警告您有关该问题的信息。如果您不确定您的 HAProxy 服务器是否默认为 1024 位 Diffie-Hellman 参数,您可以使用SSL Labs Server Test 之类的工具来检查您。如果您收到包含一行的报告This server supports weak Diffie-Hellman (DH) key exchange parameters,则您的 HAProxy 服务器会受到影响。
如果您已经确定您的 HAProxy 服务器正在生成有关tune.ssl.default-dh-param设置的警告,并且您想跳过故障排除,则本教程末尾的解决Secure tune.ssl.default-dh-param警告部分将介绍如何解决该问题。
检查tune.ssl.default-dh-param警告使用systemctl
按照本系列开头的如何对常见 HAProxy 错误进行故障排除教程中的故障排除步骤进行操作,对Setting tune.ssl.default-dh-param to 1024 by default警告消息进行故障排除时的第一步是使用systemctl.
的输出systemctl status可能包含解决错误所需的所有诊断信息。但是,检查服务的当前状态haproxy以确保它正在运行并且在您解决警告时依赖它的任何服务仍然能够运行非常重要。
使用此systemctl命令检查 HAProxy 在任何 Linux 发行版上的状态:
- sudo systemctl status haproxy.service -l --no-pager
该-l标志将确保systemctl输出一行的全部内容,而不是用省略号 ( …)替换长行。该--no-pager标志会将整个日志输出到您的屏幕,而无需调用这样的工具less,一次只显示一个内容屏幕。
由于您正在对Setting tune.ssl.default-dh-param to 1024 by default警告消息进行故障排除,您应该会收到类似于以下内容的输出:
Output● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2020-10-06 14:31:39 UTC; 2min 31s ago
Process: 71406 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS)
Main PID: 71407 (haproxy)
. . .
Oct 06 14:31:39 bb9fb4c53743 systemd[1]: Starting HAProxy Load Balancer...
Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : parsing [/etc/haproxy/haproxy.cfg:69] : 'bind *:5000' :
Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: unable to load default 1024 bits DH parameter for certificate '/etc/haproxy/fullchain.pem'.
Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: , SSL library will use an automatically generated DH parameter.
Oct 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.
Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy main started.
Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy static started.
Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy app started.
Oct 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-param警告的行,请跳至tune.ssl.default-dh-param本教程末尾的 [解决警告](resolving-a-tunessldefault-dh-param-warning) 部分,了解如何使用更安全的值配置 HAProxy。
否则,如果您的systemctl输出未提供有关警告的具体信息,但您知道您的服务器正在使用弱 Diffie-Hellman 参数,本教程的下一部分将指导您使用journalctl日志来定位警告消息。
检查tune.ssl.default-dh-param警告使用journalctl
如果您的systemctl输出不包含tune.ssl.default-dh-param警告但您知道您的服务器受到影响,您应该继续使用该journalctl命令检查systemdHAProxy 的日志。
在任何 Linux 发行版上运行以下命令以检查服务systemd的日志日志haproxy:
- sudo journalctl -u haproxy.service -l --no-pager | grep tune.ssl.default-dh-param
| grep tune.ssl.default-dh-param命令的一部分使用管道 ( |) 将输出发送journalctl到grep命令作为输入。使用管道意味着只有来自日志的匹配行才会显示在屏幕上。
如果日志包含tune.ssl.default-dh-param警告,那么您将收到如下输出:
OutputOct 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-param值”部分,了解如何使用更安全的值配置 HAProxy。
如果运行journaltcl命令后没有收到任何输出,下一节将演示如何tune.ssl.default-dh-param使用 HAProxy 的内置配置检查工具检查警告。
tune.ssl.default-dh-param使用haproxy -c或日志文件检查警告
HAProxy 包含一个可以检查和验证其配置文件的命令。您可以使用该命令来检查语法错误或无效设置,而无需重新启动 HAProxy 并冒着服务停机的风险。此外,如果您的 HAProxy 服务器配置为将输出记录到文件或系统日志,您可以检查日志文件以检查tune.ssl.default-dh-param警告。
要tune.ssl.default-dh-param使用 HAProxy 本身检查警告,请在任何 Linux 发行版上运行以下命令。如果您的 HAProxy 配置文件与突出显示的/etc/haproxy/haproxy.cfg路径位于不同的位置,请确保替换为您的文件的正确路径:
- sudo haproxy -c -f /etc/haproxy/haproxy.cfg
如果您的服务器配置了 SSL/TLS 并且没有tune.ssl.default-dh-param设置,那么您将收到类似于以下内容的警告输出:
Output[WARNING] 279/150829 (71512) : parsing [/etc/haproxy/haproxy.cfg:69] : 'bind *:5000' :
unable to load default 1024 bits DH parameter for certificate '/etc/haproxy/fullchain.pem'.
, SSL library will use an automatically generated DH parameter.
[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.
Configuration file is valid
突出显示的行包含tune.ssl.default-dh-param警告。
要使用 HAProxy 的日志检查警告消息,您可以tune.ssl.default-dh-param使用grep命令搜索与字符串匹配的行。运行以下命令检查警告:
- sudo grep tune.ssl.default-dh-param /var/log/haproxy.log
请注意,如果您已使用不同的日志位置配置 HAproxy,请确保在您的路径中替换突出显示的/var/log/haproxy.log文件。
如果您的服务器正在生成警告,那么您将收到如下输出:
OutputOct 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警告
您可以tune.ssl.default-dh-param使用一些不同的设置来解决HAProxy 中的警告。一种选择是根据警告消息tune.ssl.default-dh-param明确地将该值设置为大于 1024的值/etc/haproxy/haproxy.cfg。但是,HAProxy 文档建议指定自定义 Diffie-Hellman 参数,因为这种方法更安全,因此我们将改用该方法。
首先,您将dhparams.pem使用该openssl实用程序生成一个文件。创建文件后,您会将其添加到全局 HAProxy 配置部分,以便任何frontend块都将继承该设置。
要生成自定义 DH 参数,请运行以下命令:
- sudo openssl dhparam -out /etc/haproxy/dhparams.pem 2048
您将收到如下输出:
OutputGenerating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..............
命令完成后,将 HAProxy 配置为使用自定义 DH 参数文件。/etc/haproxy/haproxy.cfg在vi或您喜欢的编辑器中打开。
sudo vi /etc/haproxy/haproxy.cfg
在文件中找到如下所示的部分:
Output. . .
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
# utilize system-wide crypto-policies
#ssl-default-bind-ciphers PROFILE=SYSTEM
ssl-default-server-ciphers PROFILE=SYSTEM
现在在该行之后添加一行,ssl-default-server-ciphers PROFILE=SYSTEM如下所示:
ssl-dh-param-file /etc/haproxy/dhparams.pem
整个部分应类似于以下内容,包括ssl-dh-param-file您添加的新突出显示的行:
/etc/haproxy/haproxy.cfg. . .
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
# utilize system-wide crypto-policies
#ssl-default-bind-ciphers PROFILE=SYSTEM
ssl-default-server-ciphers PROFILE=SYSTEM
ssl-dh-param-file /etc/haproxy/dhparams.pem
完成文件编辑后,通过按ESC、键入:wq和按来保存并关闭它ENTER。
使用以下haproxy -c命令测试配置以确保您添加了正确的设置并且 HAProxy 可以访问自定义dhparams.pem文件:
- sudo haproxy -c -f /etc/haproxy/haproxy.cfg
您应该会收到说明配置有效的输出,如下所示:
OutputConfiguration file is valid
如果您的配置有效,请重新启动 HAProxy,使其使用新的 Diffie-Hellman 参数文件:
- sudo systemctl restart haproxy.service
您现在已经使用 2048 位自定义 Diffie-Hellman 参数集配置了 HAProxy,所有前端都可以使用这些参数。您还抑制了tune.ssl.default-dh-param警告。
结论
在本教程中,您学习了如何对 HAProxySetting tune.ssl.default-dh-param to 1024 by default警告消息进行故障排除。您探索了四种不同的方法来检查 HAProxy 的配置以查找消息。首先,您使用systemctl和journalctl检查 HAProxy 服务器的状态并尝试在systemd日志中查找消息。然后您使用内置的haproxy -c配置检查检查了 HAProxy 配置文件。最后,您使用grepHAProxy 日志文件上的命令检查了日志条目。
在确认您的服务器正在生成Setting tune.ssl.default-dh-param to 1024 by default警告消息后,您生成了一个自定义的 Diffie-Hellman 参数文件,并通过设置ssl-dh-param-file配置指令将 HAProxy 配置为使用它。
现在您已经有了该配置,您的 HAProxy 服务器将默认使用更安全的 Diffie-Hellman 参数,并且tune.ssl.default-dh-param警告消息将不再出现在您的日志中。