A10 Thunder(vThunder、ACOS 5.2.0)で、SSL アクセラレータ(SSL オフロード)を設定し、動作を確認します。HTTPS の暗号化と復号を Web サーバではなく Thunder で行うことで、サーバの処理の負担を減らせます。
クライアントと Thunder の間は HTTPS で暗号化し、Thunder で復号してから、Web サーバへは HTTP で転送します。サーバ側は暗号化の処理をせずに済み、証明書も Thunder にまとめて置けます。
- Thunder で自己署名の SSL 証明書と秘密鍵を作る方法
- Client SSL テンプレートに証明書と秘密鍵を登録する方法
- HTTPS の仮想ポートを作ってテンプレートを適用する方法
- ブラウザとセッション情報での動作確認
検証構成
次の記事の構成をもとに設定します。Virtual Server vip-web(10.0.10.200)と、Web-01・Web-02 をまとめたサービスグループ sg-web(ラウンドロビン)は作成済みです。
設定する部品と、その関係は次のとおりです。証明書と秘密鍵を Client SSL テンプレートに登録し、そのテンプレートを HTTPS の仮想ポートに適用します。
SSL 証明書を作る
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
自己署名証明書と秘密鍵を作る
今回はテストのため、Thunder 自身が発行する自己署名証明書を使います。ADC ›› SSL Management を開き、Create をクリックします。
| Create As | ◉ Certificate○ CSR |
| 1File Name | ssl-hirotanoblog.work |
| CSR Generate | ☐ |
| Cert Type | RSA |
| Secured | ☐ |
| 2Common Name | www.hirotanoblog.work |
| ⋮ (Division、Organization、Locality、State or Province は空欄) | |
| 3Country | Afghanistan |
| 4Valid Days | 730 |
| 5Key Size | 2048 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | File Name | Thunder に保存する証明書と秘密鍵の名前。ssl-hirotanoblog.work とします。 |
| 2 | Common Name | 証明書のドメイン名(コモンネーム)。クライアントがアクセスする名前と同じ www.hirotanoblog.work にします。 |
| 3 | Country | 必須の項目です。今回は Afghanistan(AF、一覧の先頭)のまま作ったため、証明書の発行者は /C=AF/… になりました。実際に使う場合は国を選び直します。 |
| 4 | Valid Days | 証明書の有効日数。今回は 730(2年)にしました。 |
| 5 | Key Size | 鍵の長さ。2048 ビットを選びます。 |
| 6 | Create | 証明書と秘密鍵を作ります。 |
作成すると、SSL Management の一覧に、証明書と秘密鍵の組(Type が certificate/key)が表示されます。
| SSL Certificate Name | Type | Expiration | Issuer |
|---|---|---|---|
| 1ssl-hirotanoblog.work | certificate/key | Nov 14 06:10:56 2023 GMT | /C=AF/ |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Type/Expiration/Issuer | certificate/key は、証明書と秘密鍵の両方が登録されていることを表します。有効期限は作成日から 730 日後の 2023年11月14日で、自己署名のため、発行者(Issuer)は証明書自身の名前(CN=www.hirotanoblog.work)です。 |
SSL テンプレートを作る
Client SSL テンプレートを作る
クライアントとの間の SSL の設定は、Client SSL テンプレートにまとめます。ここに、作成した証明書と秘密鍵を登録します。ADC ›› Templates ›› SSL を開き、Create ›› Client SSL を選びます。
| 1Name | temp_hirotanoblog.work |
| ⋮ (Auth Username、CA Certs などは空欄) | |
| Chain Certificate | |
| 2Server Certificate | ssl-hirotanoblog.work |
| Alternate Server Certificate | |
| Server Private Key | ssl-hirotanoblog.work |
| Server Private Key Passphrase | |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | テンプレートの名前。temp_hirotanoblog.work とします。 |
| 2 | Server Certificate/Server Private Key | クライアントに提示する証明書と、その秘密鍵。どちらも STEP 1 で作った ssl-hirotanoblog.work を選びます。 |
| 3 | OK | テンプレートを作ります。SSL テンプレートの一覧に、Type が Client SSL の temp_hirotanoblog.work が表示されます。 |
Client SSL テンプレートは、クライアントと Thunder の間の SSL を受け持ちます。Thunder とサーバの間も暗号化したい場合は、別に Server SSL テンプレートを使います。今回はサーバとの間を HTTP にするので、Client SSL テンプレートだけを使います。
仮想ポートにテンプレートを適用する
HTTPS の仮想ポートを作る
作成済みのバーチャルサーバ vip-web に、HTTPS 用の仮想ポートを追加し、Client SSL テンプレートを適用します。ADC ›› SLB ›› Virtual Servers で vip-web を開き、Virtual Port の Create をクリックします。
| Name | |
| 1Protocol | HTTPS |
| Port or Port Range | 443 |
| Connection Limit | 64000000 |
| Action | Enable |
| ⋮ (Support HTTP2、Source NAT 関連は空欄) | |
| 2Service Group | sg-web |
| 3Template Client SSL | temp_hirotanoblog.work |
| Template Server SSL | |
| Template Cache | |
| Template HTTP | |
| Persist Type | ○ Destination IP○ Source IP○ Cookie |
| Port / Port Range | Protocol | Actions |
|---|---|---|
| 80 | http | Edit |
| 5443 | https | Edit |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Protocol/Port or Port Range | HTTPS を選び、ポート番号に 443 を入れます。 |
| 2 | Service Group | 振り分け先の sg-web を選びます。サーバ側は HTTP(TCP 80)のままです。 |
| 3 | Template Client SSL | STEP 2 で作った temp_hirotanoblog.work を選びます。 |
| 4 | Create | 仮想ポートを追加します。 |
| 5 | 443(https) | 既存の 80(http)に加えて、443(https)の仮想ポートが一覧に並びます。 |
| 6 | Update | バーチャルサーバの設定を保存します。 |
ADC ›› SLB ›› Virtual Servers で、vip-web と、http・https の仮想ポートの Status が緑になっていることを確かめます。
| Status | Name | IP Address |
|---|---|---|
| vip-web | 10.0.10.200 | |
| http | 80 | |
| 1 | https | 443 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | https の Status(緑) | 緑:443(https)の仮想ポートが Up しています。 |
動作確認
DNS で、www.hirotanoblog.work が VIP の 10.0.10.200 に名前解決されるように設定します。そのうえで、ブラウザで https://www.hirotanoblog.work にアクセスします。
HTTPS でアクセスでき、Web-02 の画面が表示されました。証明書を見ると、Thunder で作った www.hirotanoblog.work の自己署名証明書が使われています。自己署名証明書はブラウザが信頼する認証局が発行したものではないため、証明書の警告が出ますが、今回はテストなのでそのまま進めます。
本番では自己署名証明書ではなく、認証局が発行した証明書を使います。ADC ›› SSL Management の Create As で CSR を選ぶと証明書署名要求(CSR)を作れるので、認証局に申請して発行された証明書を Thunder に登録し、Client SSL テンプレートで選びます。中間証明書がある場合は Chain Certificate に設定します。
セッション情報:443 で受けて 80 で転送
ADC ›› SLB ›› Session でセッションを見ると、Type が SLB-L7 のセッションができています。クライアントから Thunder までは TCP 443、Thunder から Web サーバまでは TCP 80 で接続していることがわかります。
| Protocol | Forward Source | Forward Dest | Reverse Source | Reverse Dest | Type |
|---|---|---|---|---|---|
| Tcp | (伏せています):54804 | 110.0.10.200:443 | 210.0.200.100:80 | (伏せています):54804 | 3SLB-L7 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Forward Dest 10.0.10.200:443 | クライアントは VIP の 443 番(HTTPS)に接続しています。 |
| 2 | Reverse Source 10.0.200.100:80 | Thunder は復号した通信を、Web-01 の 80 番(HTTP)に転送しています。 |
| 3 | Type SLB-L7 | HTTP の中身を扱う L7 の負荷分散として処理しています。SSL を Thunder で終端して HTTP を読むので、L7 の処理になります。 |
うまくいかないとき
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| HTTPS で接続できない | 仮想ポート 443 が https ではない。Client SSL テンプレートが適用されていない | Virtual Port の Protocol と Template Client SSL |
| 証明書の警告が出る | 自己署名証明書を使っている。Common Name とアクセスした名前が違う | 証明書の発行者と Common Name、アクセスに使った URL |
| Web の画面が返らない | サービスグループのサーバがダウンしている | Servers と Service Groups の Status |
まとめ
| 手順 | GUI の場所 | 今回の設定 |
|---|---|---|
| STEP 1 証明書と秘密鍵 | ADC ›› SSL Management ›› Create | ssl-hirotanoblog.work(自己署名、CN=www.hirotanoblog.work、2048 ビット) |
| STEP 2 Client SSL テンプレート | ADC ›› Templates ›› SSL ›› Create ›› Client SSL | temp_hirotanoblog.work(Server Certificate と Server Private Key に STEP 1 の証明書と鍵) |
| STEP 3 HTTPS の仮想ポート | ADC ›› SLB ›› Virtual Servers ›› vip-web | HTTPS 443、Service Group sg-web、Template Client SSL temp_hirotanoblog.work |
SSL オフロードでは、クライアントとの間の HTTPS を Thunder で終端し、サーバとの間は HTTP で転送します。設定は「証明書と秘密鍵 → Client SSL テンプレート → HTTPS の仮想ポート」の順に作ると、迷わずに進められます。
コメント