HAproxySSL/TLS警告:默认情况下将tune.ssl.default-dh-param设置为1024

来自菜鸟教程
跳转至:导航、​搜索

介绍

在本教程中,您将学习如何使用本系列开头的 如何对常见 HAProxy 错误进行故障排除 教程中描述的方法对 HAProxy Setting tune.ssl.default-dh-param to 1024 by 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 服务器是否默认为 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 警告部分说明了如何解决问题。

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

按照本系列开头的 如何排除常见 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 警告的行,请跳到本教程末尾的 Resolving a tune.ssl.default-dh-param Warning 部分了解如何使用更安全的值配置 HAProxy。

否则,如果您的 systemctl 输出没有给出有关警告的具体信息,但您知道您的服务器正在使用弱 Diffie-Hellman 参数,本教程的下一部分将指导您使用 journalctl日志以找到警告消息。

使用 journalctl 检查 tune.ssl.default-dh-param 警告

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

在任何 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.

由于此输出包含警告,您可以跳到本教程末尾的 Setting a Secure tune.ssl.default-dh-param Value 部分,了解如何使用更安全的值配置 HAProxy。

如果在运行 journaltcl 命令后没有收到任何输出,下一节将演示如何使用 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/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 的日志检查警告消息,您可以使用 grep 命令搜索与 tune.ssl.default-dh-param 字符串匹配的行。 运行以下命令以检查警告:

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 警告

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

首先,您将使用 openssl 实用程序生成一个 dhparams.pem 文件。 创建文件后,您将其添加到全局 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 参数文件。 在 vi 或您喜欢的编辑器中打开 /etc/haproxy/haproxy.cfg

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 警告。

结论

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

在您确认您的服务器正在生成 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 警告消息将不再出现在您的日志中。