はじめに
BIG-IP LTMでは、HTTPモニターやHTTPSモニターを使用することで、Pool Memberに対するヘルスチェックを実施できます。
HTTPモニターであれば比較的簡単に設定できますが、HTTPSモニターの場合、Send StringやReceive Stringを正しく設定していても、ヘルスチェックが失敗することがあります。
HTTPSモニターでは、HTTPリクエストとレスポンスの確認に加えて、TLSハンドシェイクやサーバ証明書、SSLプロファイルなどの設定も関係するためです。
本記事では、SSL Server ProfileをHTTPSモニターに適用し、サーバ証明書を検証する構成について、設定手順を整理します。
また、HTTPSモニターが失敗する際の確認ポイントについても紹介します。
HTTPSモニターの仕組み
まず、BIG-IPにおけるHTTPモニターとHTTPSモニターの違いを整理します。
| 項目 | HTTPモニター | HTTPSモニター |
|---|---|---|
| 通信プロトコル | HTTP | HTTPS |
| 一般的な宛先ポート | TCP/80 | TCP/443 |
| TLSハンドシェイク | 不要 | 必要 |
| HTTPリクエストの送信 | 可能 | 可能 |
| HTTPレスポンスの確認 | 可能 | 可能 |
| SSLプロファイル | 不要 | 利用可能 |
| サーバ証明書の検証 | 対象外 | 設定により可能 |
HTTPSモニターでは、基本的に以下の流れでヘルスチェックを実施します。
- BIG-IPから監視対象サーバにTCP接続する。
- TLSハンドシェイクを実施する。
- 必要に応じてサーバ証明書を検証する。
- Send Stringで指定したHTTPリクエストを送信する。
- サーバからHTTPレスポンスを受信する。
- Receive Stringなどの条件に従って正常性を判定する。
そのため、HTTPSモニターが失敗する場合は、TLS通信とHTTP通信のどちらで問題が発生しているのかを切り分ける必要があります。
なお、HTTPSモニターでは、SSL Server Profileを設定しただけで必ずサーバ証明書が検証されるわけではありません。 証明書の検証を行う場合は、Server Authenticationに関する設定が必要です。
前提:監視対象サーバの証明書を確認する
HTTPSモニターを設定する前に、監視対象サーバで使用している証明書を確認します。
主な確認項目は以下のとおりです。
- サーバ証明書の有効期限が切れていないこと
- 証明書の署名元である認証局(CA)が確認できること
- 必要な中間CA証明書が適切に構成されていること
- サーバ証明書のSAN(Subject Alternative Name)などが接続先のホスト名に対応していること
- Webサーバが想定したTLSバージョンおよび暗号スイートに対応していること
サーバ証明書に問題がある場合は、必要に応じて更新します。
ただし、HTTPSモニターを設定するためだけにサーバ証明書を更新する必要はありません。 既存の証明書が適切に構成されていれば、そのまま利用できます。
また、BIG-IP側でサーバ証明書の検証を有効化する場合は、証明書を発行したCAの証明書を用意します。
自己署名証明書やプライベートCAを利用している場合は、特に注意が必要です。
第1段階:認証局の証明書をインポートする
まず、監視対象サーバの証明書を検証するために、信頼するCA証明書をBIG-IPにインポートします。
設定手順
BIG-IPの管理GUIにログインし、以下のメニューを開きます。
System > Certificate Management > Traffic Certificate Management > SSL Certificate List
※BIG-IPのバージョンによってメニュー構成や名称が異なる場合があります。
「Import」をクリックし、以下の項目を設定します。
| 設定項目 | 設定内容 |
|---|---|
| Import Type | Certificate |
| Certificate Name | 任意の識別名 |
| Certificate Source | インポートするCA証明書 |
| Import | インポートを実行 |
今回は例として、CA証明書に webserver-ca という名前を設定したものとします。
インポート後、証明書一覧に登録されていることを確認してください。
補足:
証明書チェーンを検証するには、信頼するルートCA証明書や必要な中間CA証明書を適切に構成する必要があります。
公開CAを利用している場合は、BIG-IPに用意されているCAバンドルを使用できる場合もあります。
第2段階:SSL Server Profileを作成する
次に、HTTPSモニターで使用するSSL Server Profileを作成します。
BIG-IPでは、一般的に以下の2種類のSSLプロファイルを使用します。
| プロファイル | 用途 |
|---|---|
| SSL Client Profile | クライアントとBIG-IP間のTLS通信 |
| SSL Server Profile | BIG-IPとバックエンドサーバ間のTLS通信 |
HTTPSモニターはBIG-IPからバックエンドサーバへTLS接続するため、SSL Server Profileを使用します。
設定手順
以下のメニューを開きます。
Local Traffic > Profiles > SSL > Server
「Create」をクリックし、新しいSSL Server Profileを作成します。
基本設定では、以下を指定します。
| 設定項目 | 設定内容 |
|---|---|
| Name | 任意のプロファイル名 |
| Parent Profile | serverssl |
| Configuration | Advanced(必要に応じて) |
今回は例として serverssl-healthcheck という名前で作成します。
Server Authenticationの設定
SSL Server Profileの設定画面には多数の項目がありますが、今回は特に「Server Authentication」の設定が重要です。
以下の項目を設定します。
| 設定項目 | 設定値 |
|---|---|
| Server Certificate | Require |
| Trusted Certificate Authorities | 第1段階で登録したCA証明書 |
| Authenticate Name | 必要に応じて監視対象サーバのホスト名 |
Server Certificate:Require
監視対象サーバに対して、有効かつ信頼できるサーバ証明書の提示を要求します。
証明書の検証に失敗した場合、接続が失敗する可能性があります。
Trusted Certificate Authorities
サーバ証明書を検証するために信頼するCA証明書を指定します。
今回は第1段階でインポートした webserver-ca を指定します。
Authenticate Name
監視対象サーバの証明書に含まれるホスト名との照合が必要な場合は、適切なホスト名を指定します。
CAによる署名の検証と、証明書のホスト名の検証は別の確認項目である点に注意してください。
また、監視対象サーバがSNI(Server Name Indication)を必要とする場合は、SSL Server Profile側のServer Nameなどの設定についても確認してください。
SNIの設定と証明書のホスト名検証は、目的が異なります。
設定完了後、「Finished」をクリックして作成します。
なお、サーバ証明書の検証を有効化しない場合は、Server CertificateをRequireに設定する必要はありません。
今回は証明書検証を行う構成として説明しています。
第3段階:HTTPSモニターを作成する
次に、HTTPSモニターを作成します。
設定手順
以下のメニューを開きます。
Local Traffic > Monitors
「Create」をクリックして新しいモニターを作成します。
基本設定は以下のとおりです。
| 設定項目 | 設定値 |
|---|---|
| Name | 任意のモニター名 |
| Type | HTTPS |
| Parent Monitor | https |
| Configuration | Advanced |
| Interval | 監視要件に応じて設定 |
| Timeout | 監視要件に応じて設定 |
| SSL Profile | 第2段階で作成したSSL Server Profile |
今回は https-healthcheck という名前で作成します。
SSL Profileの指定
Configurationを「Advanced」に変更すると、追加の設定項目が表示されます。
その中にある「SSL Profile」から、第2段階で作成した serverssl-healthcheck を選択します。
これにより、HTTPSモニターで使用するTLS関連の設定を指定できます。
Send Stringの設定
必要に応じて、Send Stringを設定します。
例えば、www.example.com の /health に対してHTTP/1.1でGETリクエストを送信する場合は、以下のように設定します。
GET /health HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n
HTTP/1.1ではHostヘッダーが必須です。
また、HTTPリクエストのヘッダー終端を示すため、末尾に \r\n\r\n を指定します。
Hostヘッダーが不足していたり、リクエストの形式が不正だったりすると、HTTP 400 Bad Requestが返される場合があります。
Receive Stringの設定
監視対象サーバから返されるレスポンスを確認するため、Receive Stringを設定します。
例えば、監視用エンドポイントが次のようなレスポンスを返すとします。
HTTP/1.1 200 OK
Content-Type: text/plain
HEALTHY
この場合、Receive Stringに以下を指定することで、期待する文字列の有無を確認できます。
HEALTHY
ただし、Receive Stringは正規表現による照合であり、単純な文字列一致だけでなく判定条件の設計にも注意が必要です。
また、BIG-IPのバージョンやHTTPリクエストの形式によっては、HTTPステータスコードも判定に影響します。
単純にTCP/TLS接続できることを確認したいのか、アプリケーションが正常な応答を返していることまで確認したいのかによって、設定を変更してください。
第4段階:PoolにHTTPSモニターを割り当てる
最後に、作成したHTTPSモニターをPoolへ割り当てます。
設定手順
以下のメニューを開きます。
Local Traffic > Pools > Pool List
対象のPoolを選択し、Health Monitorsの設定画面を開きます。
「Available」に表示されているモニター一覧から、第3段階で作成した https-healthcheck を選択して「Active」に追加します。
設定変更後、「Update」をクリックします。
これでHTTPSモニターの割り当ては完了です。
ヘルスチェックの結果確認
HTTPSモニターの設定が完了したら、Pool Memberのステータスを確認します。
BIG-IPの管理GUIから、以下のメニューを開きます。
Local Traffic > Pools > Pool List > 対象Pool > Members
Pool Memberのステータスが正常(Up)となっていれば、ヘルスチェックが成功しています。
CLIから確認する場合は、以下のコマンドを使用できます。
tmsh show ltm pool /Common/<Pool名> members
モニターの設定内容を確認する場合は、以下を実行します。
tmsh list ltm monitor https /Common/https-healthcheck
※Pool名やパーティション名は実際の環境に合わせて変更してください。
HTTPSモニターが失敗する場合の確認ポイント
SSL Server Profileを設定してもヘルスチェックが失敗する場合は、次の項目を確認してください。
| 症状・確認項目 | 想定される原因 |
|---|---|
| TCP接続に失敗する | 通信経路、Firewall、待受ポートなどの問題 |
| TLSハンドシェイクに失敗する | TLSバージョン、暗号スイート、SNIなどの不一致 |
| 証明書検証に失敗する | CA証明書の不備、証明書の有効期限切れ、検証条件の不一致 |
| HTTP 400 Bad Requestが返される | Hostヘッダー不足、HTTPリクエストの形式不備など |
| HTTP 404 Not Foundが返される | Send Stringに指定したURLパスの誤り |
| HTTP 200が返るのにDownになる | Receive Stringなどの判定条件の不一致 |
| 応答が返らずタイムアウトする | サーバ側の処理遅延、通信経路、Timeout設定など |
特に注意したいのが、TLSの証明書検証エラーとHTTP 400 Bad Requestは、基本的に異なる段階で発生するエラーである点です。
一般に、証明書検証エラーによってTLS接続が確立できない場合、HTTPリクエストの送受信まで到達しません。
一方、HTTP 400 Bad Requestが返されている場合は、TLS接続が成立した後にHTTPリクエストの内容が問題となっている可能性があります。
したがって、HTTP 400が発生した場合に、証明書だけを原因として判断することは適切ではありません。
OpenSSLによる接続確認
BIG-IPと同じ監視対象に到達できるLinux端末などから、OpenSSLを使用してTLS接続を確認することもできます。
openssl s_client \
-connect 192.0.2.10:443 \
-servername www.example.com \
-showcerts
上記コマンドで、サーバから提示される証明書チェーンやTLSハンドシェイクの結果を確認できます。
なお、このコマンドの成功だけでBIG-IPの証明書検証やHTTPSモニターの正常性を保証できるわけではありません。BIG-IP側のTLS設定やCA証明書の信頼設定についても確認してください。
まとめ
本記事では、BIG-IP LTMでHTTPSモニターを使用する際の設定手順について解説しました。
SSL Server Profileを使用してサーバ証明書を検証する場合は、以下の4段階で設定します。
- 信頼するCA証明書をBIG-IPへインポートする。
- SSL Server Profileを作成し、Server Authenticationを設定する。
- HTTPSモニターを作成し、SSL Server Profileを割り当てる。
- HTTPSモニターをPoolに適用する。
また、HTTPSモニターが失敗する場合は、証明書の問題だけでなく、SNI、TLSバージョン、Send String、Receive Stringなどを確認する必要があります。
HTTPSモニターは単なるポート監視ではなく、アプリケーションの正常性も確認できる機能です。
監視対象の仕様を理解したうえで設定することが重要です。
参考資料
- F5公式:BIG-IP Local Traffic Manager - Monitors Tasks
- F5公式:BIG-IP System SSL Administration - SSL Traffic Management
- F5公式:HTTP/HTTPS Health Monitor Configuration and Troubleshooting