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証明書で構成され、tune.ssl.default-dh-paramパラメーターがHAProxyのhaproxy.cfg構成ファイルで設定されていない場合、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警告の解決方法セクションで問題を修正する方法が説明されています。

tune.ssl.default-dh-param警告のチェックにsystemctlを使用する

HAProxyエラーのトラブルシューティングシリーズの冒頭で提供されるトラブルシューティング手順に従うと、Setting tune.ssl.default-dh-param to 1024 by default警告メッセージのトラブルシューティングを行う際の最初のステップは、systemctlを使用してHAProxyのステータスを確認することです。

systemctl statusの出力には、エラーを解決するために必要なすべての診断情報が含まれている場合があります。ただし、警告を解決する間、haproxyサービスの現在の状態を調査して、実行されていることを確認し、それに依存するサービスが引き続き機能していることを確認することが重要です。

任意のLinuxディストリビューションでHAProxyの状態を調べるためには、次のsystemctlコマンドを使用します:

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

-lフラグを使用すると、systemctlが長い行の代わりに省略記号()を置換するのではなく、行全体を出力します。 --no-pagerフラグを使用すると、1回に画面のコンテンツを表示する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.

この出力には、注意すべき2つの重要な部分がハイライトされています。 1つ目は、active (running)行です。これは、HAProxyが利用可能で実行されていることを示しています。サーバーがActive: failedのような行を表示する場合は、このシリーズの冒頭にあるHow to Troubleshoot Common HAProxy Errorsチュートリアルで説明されている方法を使用して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ディストリビューションで、次のコマンドを実行して、haproxyサービスのsystemdジャーナルのログを調査します:

  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.

この出力に警告が含まれているため、より安全な値でHAProxyを設定する方法については、このチュートリアルの最後のSecure tune.ssl.default-dh-param値の設定セクションにスキップできます。

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ディストリビューションで実行します。ハイライト表示された/etc/haproxy/haproxy.cfgのパスが示す場所とは異なる場所にHAProxy構成ファイルがある場合は、正しいファイルパスに置き換えてください。

  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警告を生成しているかどうかを判断したので、このチュートリアルの次のステップに進むことができます。これには、問題を解決するために使用できる2つの方法が説明されています。

tune.ssl.default-dh-param警告の解決方法

tune.ssl.default-dh-param警告を解決するには、いくつかの異なる設定を使用できます。 1つのオプションは、/etc/haproxy/haproxy.cfgtune.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.cfgviまたはお好みのエディタで開きます。

sudo vi /etc/haproxy/haproxy.cfg

次のようなファイル内のセクションを見つけます:

Output
. . . # stats unixソケットをオンにする stats socket /var/lib/haproxy/stats # システム全体の暗号ポリシーを利用する #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
. . . # stats unixソケットをオンにする stats socket /var/lib/haproxy/stats # システム全体の暗号ポリシーを利用する #ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM ssl-dh-param-file /etc/haproxy/dhparams.pem

ファイルの編集が完了したら、ESCキーを押し、:wqと入力してENTERキーを押して保存して閉じます。

正しい設定を追加し、HAProxyがカスタムdhparams.pemファイルにアクセスできることを確認するために、haproxy -cコマンドを使用して構成をテストします:

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

以下のような構成が有効であることを示す出力が表示されるはずです:

Output
Configuration file is valid

設定が有効な場合は、新しいDiffie-Hellmanパラメータファイルを使用するようにHAProxyを再起動してください。

  1. 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の構成を調べてメッセージを見つけるための4つの異なる方法を探りました。最初に、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警告メッセージはログに表示されなくなります。

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