BIG-IP LTM の SSL アクセラレーション(SSL オフロード)を設定し、動作を確かめます。HTTPS の暗号化と復号をサーバではなく BIG-IP が受け持つので、サーバの処理負荷を減らせます。サーバ証明書や秘密鍵も BIG-IP にまとめて置くので、証明書の更新は BIG-IP だけで済みます。
- SSL アクセラレーションで、どこからどこまでが暗号化されるか
- サーバ証明書と秘密鍵を BIG-IP にインポートする手順
- Client SSL プロファイルを作り、Virtual Server に適用する手順
- HTTPS でのアクセスと統計の確認、ブラウザの警告の読み方
この記事は、次の記事で作った HTTP の負荷分散の構成(Virtual Server Web-VS:10.0.1.100、Web-01:10.0.2.24、Web-02:10.0.2.71)に、SSL アクセラレーションを足します。足す設定だけを書くので、先に次の記事を読んでおくと流れがつかみやすくなります。
BIG-IP 16.1.2 で検証しています。16.1 系はすでに F5 のサポート期間が終わっているので、これから構築する場合はサポート中のバージョンを選んでください。
SSL アクセラレーションの構成
クライアントは、Virtual Server(10.0.1.100:443)に HTTPS でアクセスします。BIG-IP はクライアントとの間の暗号化と復号を受け持ち、復号したリクエストを HTTP のまま Pool のサーバ(80 番)に転送します。サーバは今までどおり HTTP で応答するだけなので、サーバ側に証明書の設定は要りません。
クライアント側の暗号化を受け持つ設定が Client SSL プロファイルです。BIG-IP からサーバまでも暗号化したい場合は、Server SSL プロファイルも Virtual Server に適用します。この場合 BIG-IP は、復号したリクエストを暗号化し直してからサーバに送ります。この記事では Client SSL プロファイルだけを使うので、BIG-IP とサーバの間は HTTP です。
今の HTTPS で使われている暗号化のプロトコルは TLS です。SSL は TLS の前のプロトコルの名前ですが、BIG-IP の画面(SSL Profile、SSL Certificate List など)や「SSL アクセラレーション」のように、今も SSL の名前で呼ぶことが多いので、この記事でも画面の表記に合わせて SSL と書きます。
サーバ証明書の用意
ローカルの認証局で、サーバ証明書、秘密鍵、CA ルート証明書を発行しておきます。CA ルート証明書はクライアントに入れ、サーバ証明書と秘密鍵は BIG-IP に入れます。
| ファイル名 | 中身 | 入れる場所 |
|---|---|---|
| server-cert.pem | サーバ証明書(CN=www.hirotanoblog.work) | BIG-IP |
| server-key.pem | サーバ証明書の秘密鍵 | BIG-IP |
| ca-cert.pem | CA ルート証明書(CN=CA-hirotanoblog) | クライアント |
サーバ証明書や CA ルート証明書の考え方は、次の記事で説明しています。
CA ルート証明書
サーバ証明書に署名した CA ルート証明書です。CN は CA-hirotanoblog です。Issuer(発行者)と Subject(発行先)が同じ、自分で自分に署名した証明書です。クライアントの証明書ストアに、信頼する認証局として入れておきます。
クライアント(openssl で中身を表示)
$ openssl x509 -in ca-cert.pem -noout -text
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 11950287768102403307 (0xa5d7f368e5707ceb)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=JP, ST=Tokyo, L=Shinagawa-ku, CN=CA-hirotanoblog
Validity
Not Before: May 17 16:07:08 2022 GMT
Not After : May 17 16:07:08 2023 GMT
Subject: C=JP, ST=Tokyo, L=Shinagawa-ku, CN=CA-hirotanoblog
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:ce:6c:21:4e:61:b0:a2:a1:56:63:db:d4:22:38:
2c:bb:0a:2d:97:6c:5e:ce:45:a5:d3:94:49:7d:09:
・
・
・
サーバ証明書
サーバ証明書は、CN を www.hirotanoblog.work として発行し、上の CA ルート証明書で署名しています。
クライアント(openssl で中身を表示)
$ openssl x509 -in server-cert.pem -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 14957747684200753374 (0xcf949844ecb528de)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=JP, ST=Tokyo, L=Shinagawa-ku, CN=CA-hirotanoblog
Validity
Not Before: May 17 16:07:09 2022 GMT
Not After : Jul 16 16:07:09 2022 GMT
Subject: C=JP, ST=Tokyo, L=Shinagawa-ku, CN=www.hirotanoblog.work
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:c8:18:f2:73:13:39:dc:5f:ef:fd:b2:b5:b8:01:
0c:07:29:0f:55:a2:e6:c5:5f:48:4d:f9:11:46:18:
・
・
・
| 表示 | 意味 |
|---|---|
| Signature Algorithm | 認証局がこの証明書に署名したアルゴリズムです。sha1WithRSAEncryption は、ハッシュに SHA-1 を使った RSA 署名です。 |
| Issuer | この証明書に署名した認証局です。CA ルート証明書の Subject と同じ CA-hirotanoblog です。 |
| Not After | 有効期限です。時刻は GMT で、日本時間では 2022年7月17日 1:07:09 です。 |
| Subject の CN | 証明書の発行先です。クライアントがアクセスするホスト名 www.hirotanoblog.work にしています。 |
この検証のサーバ証明書は SHA-1 で署名しています。Chrome は、ローカルに入れた認証局が発行した証明書でも、SHA-1 で署名された証明書を Chrome 57 から信頼しません。また Chrome 58 からは、証明書のホスト名を CN ではなく SAN(subjectAltName)で確かめます。今のブラウザで使う証明書は、SHA-256 などで署名し、SAN に DNS 名(この記事なら www.hirotanoblog.work)を入れて発行してください。
サーバ証明書と秘密鍵のインポート
BIG-IP では、秘密鍵を先にインポートし、同じ名前の項目にサーバ証明書を取り込むと、証明書と秘密鍵が1つの組になります。
秘密鍵のインポート
System ›› Certificate Management ›› Traffic Certificate Management ›› SSL Certificate List を開き、Import をクリックします。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| 1Import Type | Key |
| 2Key Name | ◉ New○ Overwrite Existing hirotanoblog.work |
| 3Key Source | ◉ Upload File○ Paste Text ファイルを選択 server-key.pem |
| Security Type | Normal |
| Free Space on Disk | 3989 MB |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Import Type | Key を選びます。選択肢には Key、Certificate、PKCS 12 (IIS)、Archive があります。 |
| 2 | Key Name | New を選び、名前を入れます。この記事では hirotanoblog.work にします。 |
| 3 | Key Source | Upload File を選び、手元の秘密鍵 server-key.pem を選びます。 |
| 4 | Import | クリックすると秘密鍵が登録されます。 |
登録されると、SSL Certificate List に hirotanoblog.work が追加されます。Contents が RSA Key(秘密鍵だけ)になっていることを確かめます。
| Name | Contents | Key Security | Common Name | Expiration |
|---|---|---|---|---|
| ca-bundle | Certificate Bundle | Jun 24, 2022 – Oct 6, 2046 | ||
| default | RSA Certificate & Key | Normal | localhost.localdomain | Mar 24, 2032 |
| f5-ca-bundle | RSA Certificate | Entrust Root Certificat… | Dec 8, 2030 | |
| f5-irule | RSA Certificate | support.f5.com | Jul 19, 2027 | |
| 1hirotanoblog.work | RSA Key | Normal |
サーバ証明書のインポート
一覧で、STEP 1 で登録した hirotanoblog.work をクリックします。まだ証明書がないので、Certificate Subject(s) は No certificate です。ここで Import をクリックします。
| Name | hirotanoblog.work |
| Partition / Path | Common |
| 1Certificate Subject(s) | No certificate |
Import Type は Certificate、Certificate Name は /Common/hirotanoblog.work に決まった状態で表示されます。Certificate Source で Upload File を選び、手元のサーバ証明書 server-cert.pem を選んで Import をクリックします。
| Import Type | Certificate |
| Certificate Name | /Common/hirotanoblog.work |
| 1Certificate Source | ◉ Upload File○ Paste Text ファイルを選択 server-cert.pem |
| Free Space on Disk | 3989 MB |
一覧に戻ると、hirotanoblog.work の表示が変わります。
| Name | Contents | Key Security | Common Name | Expiration |
|---|---|---|---|---|
| ca-bundle | Certificate Bundle | Jun 24, 2022 – Oct 6, 2046 | ||
| default | RSA Certificate & Key | Normal | localhost.localdomain | Mar 24, 2032 |
| f5-ca-bundle | RSA Certificate | Entrust Root Certificat… | Dec 8, 2030 | |
| f5-irule | RSA Certificate | support.f5.com | Jul 19, 2027 | |
| hirotanoblog.work | 1RSA Certificate & Key | Normal | 2www.hirotanoblog.work | 3Jul 17, 2022 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Contents:RSA Certificate & Key | 証明書と秘密鍵の両方がそろった項目になりました。 |
| 2 | Common Name:www.hirotanoblog.work | サーバ証明書の Subject の CN です。 |
| 3 | Expiration:Jul 17, 2022 | サーバ証明書の有効期限です。openssl の表示(Not After:Jul 16 16:07:09 2022 GMT)を日本時間にした日付と同じです。 |
Client SSL プロファイルの作成
クライアントと BIG-IP の間の SSL を BIG-IP で終端し、復号してからサーバに転送するには、Client SSL プロファイルを Virtual Server に適用します。まずプロファイルを作ります。
Client SSL プロファイルを作る
Local Traffic ›› Profiles ›› SSL ›› Client を開き、右上の Create をクリックします。
| 1Name | hirotanoblog.work |
| Parent Profile | clientssl |
| 3Certificate Key Chain | /Common/hirotanoblog.work /Common/hirotanoblog.workAddEditDelete |
| OCSP Stapling | ☐ |
| Notify Certificate Status to Virtual Server | ☐ |
| Proxy SSL | ☐ |
| Proxy SSL Passthrough | ☐ |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Name | プロファイルの名前です。この記事では hirotanoblog.work にします。 |
| 2 | Custom | チェックを入れると、親プロファイル(Parent Profile:clientssl)から引き継いだ設定を変えられるようになります。 |
| 3 | Certificate Key Chain | Add をクリックし、次の画面で証明書と秘密鍵を選びます。追加すると、上の枠に「証明書 秘密鍵」の組が表示されます。 |
| 4 | Finished | クリックすると、プロファイルが作成されます。 |
Certificate Key Chain の Add をクリックすると、次の画面が開きます。Certificate(サーバ証明書)と Key(秘密鍵)の両方で hirotanoblog.work を選び、Add をクリックします。
| 1Certificate | hirotanoblog.work |
| Key | hirotanoblog.work |
| Chain | None |
| Passphrase | |
Chain は、サーバ証明書とルート証明書の間に中間証明書がある場合に、その中間証明書を選ぶ項目です。この記事の証明書はルートの認証局が直接署名しているので、None のままにします。秘密鍵にパスフレーズを付けていないので、Passphrase も空のままです。
Finished をクリックしたあと、Client SSL プロファイルの一覧に hirotanoblog.work が追加されていることを確かめます。
| Name | Parent Profile | Partition / Path |
|---|---|---|
| clientssl | (none) | Common |
| clientssl-insecure-compatible | clientssl | Common |
| clientssl-quic | clientssl | Common |
| clientssl-secure | clientssl | Common |
| crypto-server-default-clientssl | clientssl | Common |
| 1hirotanoblog.work | clientssl | Common |
| splitsession-default-clientssl | clientssl | Common |
| wom-default-clientssl | clientssl | Common |
Virtual Server への Client SSL プロファイルの適用
HTTP の負荷分散のために作った Virtual Server(Web-VS)に、Client SSL プロファイルを適用します。
Web-VS を HTTPS に変える
Local Traffic ›› Virtual Servers ›› Virtual Server List を開き、Web-VS をクリックします。Service Port を 80(HTTP)から 443(HTTPS)に変え、SSL Profile (Client) に作ったプロファイルを入れます。
| Name | Web-VS |
| Type | Standard |
| Source Address | 0.0.0.0/0 |
| Destination Address/Mask | 10.0.1.100 |
| 1Service Port | ◉ Port○ Port List 443 HTTPS |
| Availability | Available (Enabled) – The virtual server is available |
| State | Enabled |
| Protocol | TCP |
| HTTP Profile (Client) | http |
| ⋮ (中略) | |
| 2SSL Profile (Client) | Selected/Commonhirotanoblog.work<< >>Available/Common clientssl clientssl-insecure-compatible clientssl-quic clientssl-secure … |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | Service Port | 443(HTTPS)に変えます。もとは 80(HTTP)です。 |
| 2 | SSL Profile (Client) | Available の一覧から hirotanoblog.work を選び、<< ボタンで Selected に移します。 |
| 3 | Update | クリックすると設定が反映されます。 |
Pool のメンバーは 80 番のままです。Virtual Server が 443 番で受けた通信を、BIG-IP が復号して Web-01:80、Web-02:80 に転送するので、サーバ側の設定は変えません。HTTP Profile (Client) に http を設定しているので、BIG-IP は復号したあとの HTTP の中身も扱えます。
Service Port を 443 に変えると、Web-VS は 80 番(http://)の通信を受けなくなります。http:// でアクセスしたクライアントを https:// に誘導したい場合は、同じアドレスで 80 番の Virtual Server を別に作り、BIG-IP に最初から用意されている iRule _sys_https_redirect を適用する方法があります。
動作確認
HTTPS でアクセスして統計を見る
クライアントのブラウザで https://www.hirotanoblog.work にアクセスすると、Web サーバのページ(Web-01)が表示されます。BIG-IP が HTTPS を受けて復号し、HTTP でサーバに転送できています。
| 証明書の表示 | |
|---|---|
| 3証明書のパス | CA-hirotanoblog › www.hirotanoblog.work |
| 発行元 | CA-hirotanoblog |
| 有効期限 | 2022年7月17日 日曜日 1時07分09秒 日本標準時 |
| 状態 | この証明書は有効です |
| シリアル番号 | 00 CF 94 98 44 EC B5 28 DE |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 保護されていない通信(赤) | Chrome がこのサーバ証明書を安全と判断していないことを示します。理由は下で説明します。 |
| 2 | Web-01 | Pool のサーバ(Web-01)のページです。HTTPS でアクセスし、HTTP のサーバから応答が返っています。 |
| 3 | 証明書のパスと「この証明書は有効です」(緑) | BIG-IP が提示したサーバ証明書が、クライアントに入れた CA-hirotanoblog までたどれています。シリアル番号は openssl の表示(0xcf949844ecb528de)と同じです。 |
証明書の表示では「この証明書は有効です」となっており、CA ルート証明書をクライアントに入れたことで、証明書の連なりは信頼されています。それでも Chrome が「保護されていない通信」と表示するのは、このサーバ証明書が SHA-1 で署名されているためです(Signature Algorithm:sha1WithRSAEncryption)。前に書いたとおり、Chrome は SHA-1 で署名された証明書を、ローカルの認証局のものでも信頼しません。この検証では SSL アクセラレーションの動作だけを確かめるので、表示はそのままにしています。SHA-256 で署名し SAN を入れた証明書に替えるときは、STEP 1 の Key Name と STEP 2 の画面で Overwrite Existing を選ぶと、同じ名前の項目を上書きできます。
次に、BIG-IP の統計で通信量を確かめます。Statistics ›› Module Statistics ›› Local Traffic を開き、Statistics Type で Virtual Servers を選ぶと、Web-VS の In/Out のカウントが増えています。
| 1Statistics Type | Virtual Servers |
| Data Format | Normalized |
| Auto Refresh | Disabled |
| Bits | Packets | |||||
|---|---|---|---|---|---|---|
| Status | Virtual Server | Partition / Path | In | Out | In | Out |
| Web-VS | Common | 21.6M | 6.5M | 1.3K | 1.7K | |
Statistics Type で Pools を選ぶと、Pool 全体と、Web-01、Web-02 それぞれの In/Out のカウントが確かめられます。
| 1Statistics Type | Pools |
| Bits | Packets | |||||
|---|---|---|---|---|---|---|
| Status | Pool | Pool Member | In | Out | In | Out |
| Web-Pool | 682.2K | 5.9M | 474 | 828 | ||
| Web-01:80 | 296.9K | 870.9K | 80 | 126 | ||
| Web-02:80 | 585.3K | 5.0M | 394 | 702 | ||
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Statistics Type | 表示する統計の種類です。Virtual Servers と Pools を切り替えて見ます。 |
| 2 | Bits/Packets の In と Out | Virtual Server の統計はクライアントと BIG-IP の間(HTTPS)、Pool の統計は BIG-IP とサーバの間(HTTP)の通信量です。Web-01:80 と Web-02:80 の両方のカウントがあり、HTTPS で受けた通信が2台のサーバに振り分けられています。 |
うまくいかないとき
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| ブラウザが証明書の警告を出す | SHA-1 で署名している、SAN にホスト名がない、CA ルート証明書がクライアントに入っていない、アクセスしたホスト名と証明書の名前が違う | サーバ証明書の Signature Algorithm と SAN、クライアントの証明書ストア、アクセスした URL |
| Certificate Key Chain で選べない | 証明書と秘密鍵が別の名前で入っている、秘密鍵だけで証明書を取り込んでいない | SSL Certificate List の Contents が RSA Certificate & Key になっているか |
| https:// でつながらない | Service Port が 443 になっていない、SSL Profile (Client) が Selected に入っていない | Web-VS の Service Port と SSL Profile (Client) |
| http:// でつながらなくなった | Web-VS が 443 番だけを受けている | 80 番の Virtual Server と、https:// への誘導の設定 |
まとめ
| 設定 | 設定場所 | この記事の設定 |
|---|---|---|
| 秘密鍵 | System ›› Certificate Management ›› Traffic Certificate Management ›› SSL Certificate List の Import | Import Type:Key、Key Name:hirotanoblog.work、server-key.pem |
| サーバ証明書 | SSL Certificate List で hirotanoblog.work を開いて Import | server-cert.pem(Contents が RSA Certificate & Key になる) |
| Client SSL プロファイル | Local Traffic ›› Profiles ›› SSL ›› Client の Create | Name:hirotanoblog.work、Certificate Key Chain:hirotanoblog.work の証明書と秘密鍵 |
| Virtual Server | Local Traffic ›› Virtual Servers ›› Virtual Server List の Web-VS | Service Port:443、SSL Profile (Client):hirotanoblog.work |
SSL アクセラレーションは、証明書と秘密鍵を BIG-IP に入れ、それを使う Client SSL プロファイルを Virtual Server に適用するだけで動きます。サーバ側は HTTP のままなので、既存の HTTP の負荷分散に後から足せます。証明書は、今のブラウザに合わせて SHA-256 などで署名し、SAN にホスト名を入れて用意してください。
コメント