概要
Let'sEncryptSSLをHAProxyにインストールする手順を説明します。 Let's Encrypt certbotを使用したhaproxyのインストールと構成、およびsslの取得の他に、証明書を自動的に更新する方法についても説明します。書かれた指示はGNU/Linuxサーバー(この場合はDebian)で実行されます。
前提条件:
- HAProxyがインストールされています
- Cerbotがインストールされています
注: この例では、HAProxyとCertbotが同じサーバーにインストールされています。
HAProxyにLet'sEncryptSSLをインストールする
HAProxySSL構成
SSL証明書を取得できるようにするには、HAProxyを構成する必要があります。つまり、Certbotリクエストをパススルーし、HTTPSプロトコルを適用する必要があります。
構成の一例は次のようになります:
frontend haproxy
#public IP address binded
bind 123.123.123.123:80
bind 123.123.123.123:443 ssl crt /etc/ssl/example.com.pem
# HTTPS redirect
redirect scheme https code 301 if !{ ssl_fc }
mode http
default_backend test_site
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt-backend if letsencrypt-acl
backend test_site
mode http
server test_site1 10.0.51.11:80 check inter 5s rise 3 fall 2
server test_site2 10.0.51.12:80 check backup inter 5s rise 3 fall 2
backend letsencrypt-backend
server letsencrypt 123.123.123.123:80
そして、構成を確認して説明します。
まず、haproxyフロントエンドを定義しました:
frontend haproxy #public IP address binded bind 123.123.123.123:80 bind 123.123.123.123:443 ssl crt /etc/ssl/example.com.pem
この例では、フロントエンドで、パブリックIPアドレスと、HTTPおよびHTTPS用のポート80および443をバインドしました。プライベートIPアドレスもバインドできます。また、定義しました
443ポートバインドで、HAProxyサーバーマシンにあるssl証明書とssl証明書のファイル名はどこにありますか。
# HTTPS redirect redirect scheme https code 301 if !{ ssl_fc }
このコマンドは、httpsリダイレクトを常に強制します。
mode http default_backend test_site acl letsencrypt-acl path_beg /.well-known/acme-challenge/ use_backend letsencrypt-backend if letsencrypt-acl
ここでは、バックエンドサーバーの名前を定義し、Let's Encryptからドメイン名のacmeチャレンジを検出した場合に、Let'sencryptバックエンドサーバーを使用するようにHaproxyに指示しました。
backend test_site mode http server test_site1 10.0.51.11:80 check inter 5s rise 3 fall 2 server test_site2 10.0.51.12:80 check backup inter 5s rise 3 fall 2 backend letsencrypt-backend server letsencrypt 123.123.123.123:80
バックエンド側では、テストサイトのWebサーバーとして機能する2つのサーバーを例として定義しました。これにより、Haproxyはトラフィックを追跡して負荷分散できます。
また、Haproxyをインストールしたのと同じサーバーであるバックエンドサーバーも定義します。
SSL証明書の取得
HaproxyがアクティブなときにLet'sencryptからssl証明書を取得するには、HaproxyとCertbotがインストールされているサーバーで次の2つのコマンドのいずれかを実行します。
sudo certbot certonly --standalone --preferred-challenges http --http-01-address 123.123.123.123 --http-01-port 80 -d example.com --non-interactive --agree-tos --email [email protected] sudo certbot certonly --standalone --preferred-challenges http --http-01-port 80 -d example.com --non-interactive --agree-tos --email [email protected]>
基本的に、両方のコマンドは同じように機能し、どちらでも試すことができます。場合によっては2番目のコマンドが機能しない場合は、最初のコマンド引数にパブリックIPアドレスを追加しました。そのため、使用するチャレンジ、リッスンするポートを宣言したコマンドで、certbotがSSLを要求するドメイン名を指定し、TOSに同意して、メールアドレスを提供しました。
これらのコマンドのいずれかを実行するときは、example.comをssl証明書が必要なドメインに置き換え、123。ipアドレスをサーバーからのIPに置き換え、正当な電子メールを提供して、Let'sEncryptから通知を取得します。 。
ssl証明書を取得して有効ですが、Haproxyは使用できません。 HaproxyがLet'sencryptのssl証明書を使用するには、ssl証明書を1つのファイルに保存する必要があります。 Haproxyでは、SSL証明書が単一のファイルに含まれている必要があります。
Let’s Encryptの証明書は、フルチェーン、秘密鍵、証明書ファイルの3つの別々のファイルで提供されます。 Haproxyがsslとhttpsを使用するには、単一のファイルに完全なチェーンと秘密鍵があれば十分です。単一のSSL証明書ファイルを作成し、後でそれを使用するようにHaproxyを構成できます。証明書ファイルからコンテンツをコピーして、HaproxyのSSL証明書となる単一の.pemファイルにコピーできます。
これを実現するには、次のようなコマンドで実行できます。
sudo cat "/etc/letsencrypt/live/example.com/fullchain.pem" "/etc/letsencrypt/live/example.com/privkey.pem" > "/etc/ssl/example.com.pem"
Let's Encryptの証明書ファイルは、Let'sEncryptディレクトリにあります。各SSL証明書は、ドメイン名として指定されたディレクトリに編成されています。このコマンドは、証明書の内容を取得して1つのファイルに配置します。次に、上記の構成のように、このファイルを使用するようにHaproxyに指示して構成できます。もちろん、example.comをドメイン名に置き換え、投稿の冒頭の構成のように、作成したssl証明書ファイルの場所をHaproxy構成に追加します。
この後、使用するSSL証明書の場所をHaproxy構成ファイルに追加したら、Haproxyサービスを再起動します。
sudo systemctl restart haproxy.service
HAProxySSL証明書の自動更新
HaproxyがSSL証明書を使用するためにこの種のセットアップを使用する場合、考慮すべきことの1つは、この方法では証明書を使用するカスタムファイルを作成し、この方法では、SSL証明書の有効期限が切れても更新されないことです。さて、certbotはLet’s cryptoから証明書を更新しますが、Haproxyは新しい証明書を使用できなくなります。
ただし、certbotとHaproxyを使用してセットアップを作成し、HaproxyのSSL証明書を更新することもできます。このためには、bashスクリプトを作成し、それを使用するようにcerbotを構成し、certbotがLet’sEncryptから証明書を更新した後にポストフックで実行する必要があります。 Let's Encrypt certbotはデフォルトで自動更新を有効にしており、更新を実行するタイミングでcronジョブを構成しています。デフォルトでは、Let’s Encrypt sslは3か月間有効で、cerbotは有効期限が切れる前に証明書を更新します。したがって、Haproxyのssl更新のセットアップでは、certbotがssl証明書を更新すると、作成してpost-hookディレクトリに配置したpost-hook bashスクリプトが実行され、Haproxyが新しいsslを使用できるようになります。証明書。
bashスクリプトは次のようになります:
#!/bin/bash sudo cat "/etc/letsencrypt/live/example.com/fullchain.pem" "/etc/letsencrypt/live/example.com/privkey.pem" > "/etc/ssl/example.com.pem" sudo systemctl restart haproxy.service
これは基本的に、Haproxyが使用するカスタムSSL証明書ファイルを作成するために実行した以前の2つのコマンドです。このスクリプトを、ドメイン名構成ディレクトリのLet'sEncryptポストフックディレクトリに配置します。次の写真のように:
sudo touch /etc/letsencrypt/renewal-hooks/post/haproxy-ssl-renew.sh sudo nano /etc/letsencrypt/renewal-hooks/post/haproxy-ssl-renew.sh
これらのコマンドを使用して、スクリプトを作成し、スクリプトに貼り付けることができます。
次に、Let’s Encryptのドメイン構成ファイルにpost_hookパラメーターを追加して、作成したbashスクリプトを実行します。
sudo nano /etc/letsencrypt/renewal/example.com.conf
ここで、shツールを使用してスクリプトを実行したことがわかります。それを行う1つの方法です。ただし、sudo chmod + xを使用してスクリプトを実行可能にすることもでき、同様に機能します。そしてこれが最後のステップでした。完了しました。
概要
Let’s Encrypt SSLをHAProxyにインストールする方法と、let’sencryptcerbotを使用してhaproxyの自動更新を実行する方法についても説明しました。少なくとも、それを行う方法の1つ。 HAProxyがどのように機能するかを理解するためにさらに情報が必要な場合は、haproxyの機能を説明し、構成例を説明したこの投稿を確認してください。構成の詳細を説明しました。
どうもありがとうございました…