HAProxy で CA SSL 証明書を構成する方法


HAProxy は、TCP および HTTP アプリケーションに高可用性と負荷分散機能を提供する、広く使用されている信頼性の高い高性能リバース プロキシです。デフォルトでは、OpenSSL でコンパイルされているため、SSL ターミネーションがサポートされているため、Web サイト/アプリケーション スタックは、「Web エントリ サーバー」またはアプリケーション アクセス ゲートウェイ サーバーとクライアント アプリケーションの間のトラフィックを暗号化および復号化できます。

このガイドでは、HAPorxy で CA SSL 証明書を構成する方法を示します。このガイドは、CA から証明書を既に受け取っており、HAProxy サーバーにインストールして構成する準備ができていることを前提としています。

予想されるファイルは次のとおりです。

  • 証明書自体。
  • バンドルまたはチェーンとも呼ばれる中間証明書。
  • 利用可能な場合はルート CA。
  • 秘密鍵。

PEM 形式の SSL 証明書ファイルを作成する

HAProxy で CA 証明書を設定する前に、HAProxy には単一の .pem ファイルが必要であることを理解する必要があります。このファイルには、上記のすべてのファイルの内容を次の順序で連結して含める必要があります。

  • .key で終わる秘密鍵 (ファイルの先頭または末尾にある可能性があります)。
  • その後に SSL 証明書が続きます (通常は .crt で終わります)。
  • 次に CA-Bundle (通常は .ca-bundle で終わります)、そして
  • 利用可能な場合、ルート CA。

.pem ファイルを作成するには、~/Downloads などの証明書ファイルがあるディレクトリに移動し、次のように cat コマンドを実行します (ファイル名は適宜置き換えてください)。

$ cat example.com.key STAR_example_com/STAR_example_com.crt STAR_example_com/STAR_example_com.ca-bundle > example.com.pem

HAProxy で PEM SSL 証明書を構成する

次に、以下のように scp コマンドを使用して、作成したばかりの .pem 証明書ファイルを HAProxy サーバーにアップロードします (sysadmin と 192.168.10.24 をそれぞれリモート サーバーのユーザー名と IP アドレスに置き換えます)。

$ scp example.com.pem  [email protected]:/home/sysadmin/

次に、mkdir コマンドを使用して、証明書の .pem ファイルを保存するディレクトリを作成し、その中にファイルをコピーします。

$ sudo mkdir -p /etc/ssl/example.com/
$ sudo cp example.com.pem /etc/ssl/example.com/

次に、HAProxy 構成ファイルを開き、ssl パラメーターと crt パラメーターを使用してフロントエンド リスナー セクションで証明書を構成します。前者は SSL ターミネーションを有効にし、後者は証明書ファイルの場所を指定します。

frontend http_frontend
      mode http
      bind *:80
      bind *:443 ssl crt  /etc/ssl/example.com/example.com.pem alpn h2,http/1.1
     redirect scheme https code 301 if !{ ssl_fc }
      default_backend http_servers

SSL/TLS の特定のバージョンは、脆弱性が発見されたため、現時点では使用が推奨されていません。サポートされている SSL のバージョンを制限するには、次のように ssl-min-ver パラメータを追加します。

bind *:443 ssl crt  /etc/ssl/example.com/example.com.pem alpn h2,http/1.1   ssl-min-ver TLSv1.2

HTTP を HTTPS にリダイレクトするように HAProxy を構成する

Web サイトが HTTPS 経由でのみアクセスできるようにするには、ユーザーが HTTP (ポート 80) 経由でアクセスしようとした場合に、HAProxy がすべての HTTP トラフィックを HTTPS にリダイレクトできるようにする必要があります。

上記の構成に次の行を追加します。

redirect scheme https code 301 if !{ ssl_fc }
OR
http-request redirect scheme https unless { ssl_fc }

フロントエンド セクションは、次のサンプル構成のようになります。

frontend http_frontend
      mode http
      bind *:80
      bind *:443 ssl crt  /etc/ssl/example.com/example.com.pem alpn h2,http/1.1  ssl-min-ver TLSv1.2
      redirect scheme https code 301 if !{ ssl_fc }
      default_backend   http_servers

backend http_servers
      mode http
      balance roundrobin
      option httpchk HEAD /
      http-response set-header X-Frame-Options SAMEORIGIN
      http-response set-header X-XSS-Protection 1;mode=block
      http-response set-header X-Content-Type-Options nosniff
      default-server check maxconn 5000
      server http_server1 10.2.1.55:80

構成ファイルを保存して閉じます。

次に、次のコマンドを使用して構文が正しいかどうかを確認します。

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

構成ファイルが有効な場合は、systemctl コマンドを使用して、haproxy サービスをリロードし、構成の最近の変更を取得します。

$ sudo systemctl reload haproxy

最後になりましたが、Web ブラウザーから Web サイトにアクセスしてセットアップ全体をテストし、証明書が正常に読み込まれ、ブラウザーが「接続は安全です」と表示されることを確認します。

それで全部です!このガイドが、HAProxy ロード バランサー ソフトウェアで SSL 証明書を構成するのに役立つことを願っています。エラーが発生した場合は、下のフィードバック フォームからお知らせください。喜んでお手伝いさせていただきます。