HAproxy SSL/TLS 警告:默認將 tune.ssl.default-dh-param 設置為 1024

介绍

在本教程中,您将学习如何使用本系列开头描述的方法来解决和修复 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实验室服务器测试这样的工具来帮您检查。如果您收到了一条包含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检查HAProxy的状态。

systemctl status 的輸出可能包含您解決錯誤所需的所有診斷信息。然而,檢查 haproxy 服務的當前狀態以確保它正在運行,並且任何依賴它的服務在您解決警告時仍然能夠正常運行是很重要的。

使用以下 systemctl 命令來檢查任何 Linux 發行版上 HAProxy 的狀態:

  1. 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警告部分,了解如何使用更安全的值配置HAProxy。

否则,如果您的systemctl输出未提供有关警告的具体信息,但您知道您的服务器正在使用弱Diffie-Hellman参数,则本教程的下一部分将指导您通过使用journalctl日志来定位警告消息。

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

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

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

  1. 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警告,则会收到如下输出:

Output
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.

由于此输出包含警告,您可以跳到本教程末尾的设置安全的tune.ssl.default-dh-param部分,了解如何使用更安全的值配置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 路徑,請務必替換為您的文件的正確路徑:

  1. 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 字符串匹配的行。運行以下命令來檢查警告:

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

請注意,如果您已使用不同的日誌位置配置了 HAProxy,請務必替換您的路徑以取代突出顯示的 /var/log/haproxy.log 文件。

如果您的服務器生成了警告,則您將收到如下輸出:

Output
Oct 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 参数,请运行以下命令:

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

您将收到类似以下的输出:

Output
Generating 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 文件:

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

您应该会收到类似以下的输出,表明配置是有效的:

Output
Configuration file is valid

如果您的配置有效,請重新啟動 HAProxy 以使用新的 Diffie-Hellman 參數文件:

  1. sudo systemctl restart haproxy.service

您現在已經配置了一組 2048 位的自定義 Diffie-Hellman 參數,所有前端將能夠使用它。您還壓制了 tune.ssl.default-dh-param 警告。

結論

在本教程中,您學會了如何排除 HAProxy 設置 tune.ssl.default-dh-param 默認為 1024 警告消息。您探索了四種不同的方法來檢查 HAProxy 的配置,以找到消息。首先,您使用 systemctljournalctl 檢查 HAProxy 服務器的狀態,並嘗試在 systemd 日誌中找到消息。然後,您使用內置的 haproxy -c 配置檢查來檢查 HAProxy 配置文件。最後,您使用 grep 命令在 HAProxy 的日誌文件中檢查日誌條目。

確認您的服務器正在生成 設置 tune.ssl.default-dh-param 默認為 1024 警告消息後,您生成了一個自定義的 Diffie-Hellman 參數文件,並配置 HAProxy 使用它,方法是設置 ssl-dh-param-file 配置指令。

現在您已經完成了這個配置,您的 HAProxy 服務器將默認使用更安全的 Diffie-Hellman 參數,而且 tune.ssl.default-dh-param 警告消息將不再出現在您的日誌中。

Source:
https://www.digitalocean.com/community/tutorials/haproxy-ssl-tls-warning-setting-tune-ssl-default-dh-param-to-1024-by-default