【BIG-IP LTM】SSLアクセラレーション設定と動作確認 Version: 16.1.2

BIG-IP LTM の SSL アクセラレーション(SSL オフロード)を設定し、動作を確かめます。HTTPS の暗号化と復号をサーバではなく BIG-IP が受け持つので、サーバの処理負荷を減らせます。サーバ証明書や秘密鍵も BIG-IP にまとめて置くので、証明書の更新は BIG-IP だけで済みます。

この記事でわかること
  1. SSL アクセラレーションで、どこからどこまでが暗号化されるか
  2. サーバ証明書と秘密鍵を BIG-IP にインポートする手順
  3. Client SSL プロファイルを作り、Virtual Server に適用する手順
  4. 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 で応答するだけなので、サーバ側に証明書の設定は要りません。

Web-PoolHTTPS暗号化された通信HTTP暗号化なしクライアントVirtual Server10.0.1.100:443BIG-IP LTMSSL の暗号化/復号Web-0110.0.2.24:80Web-0210.0.2.71:80
図1 SSL アクセラレーションの構成

クライアント側の暗号化を受け持つ設定が 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 に入れます。

ローカル認証局CN=CA-hirotanoblog配布署名ca-cert.pemCA ルート証明書server-cert.pemサーバ証明書server-key.pem秘密鍵クライアントBIG-IP LTMサーバ証明書を提示CA ルート証明書で検証
図2 証明書と秘密鍵の置き場所
ファイル名中身入れる場所
server-cert.pemサーバ証明書(CN=www.hirotanoblog.work)BIG-IP
server-key.pemサーバ証明書の秘密鍵BIG-IP
ca-cert.pemCA ルート証明書(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 をクリックします。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

BIG-IP 設定画面(Configuration Utility)画面イメージ
SSL Certificate/Key Source
1Import TypeKey
2Key Name◉ New○ Overwrite Existing
hirotanoblog.work
3Key Source◉ Upload File○ Paste Text
ファイルを選択 server-key.pem
Security TypeNormal
Free Space on Disk3989 MB
Cancel4Import
図3 秘密鍵のインポート(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Import TypeKey を選びます。選択肢には Key、Certificate、PKCS 12 (IIS)、Archive があります。
2Key NameNew を選び、名前を入れます。この記事では hirotanoblog.work にします。
3Key SourceUpload File を選び、手元の秘密鍵 server-key.pem を選びます。
4Importクリックすると秘密鍵が登録されます。

登録されると、SSL Certificate List に hirotanoblog.work が追加されます。Contents が RSA Key(秘密鍵だけ)になっていることを確かめます。

BIG-IP 設定画面(SSL Certificate List)画面イメージ
System ›› Certificate Management : Traffic Certificate Management : SSL Certificate List
NameContentsKey SecurityCommon NameExpiration
ca-bundleCertificate BundleJun 24, 2022 –
Oct 6, 2046
defaultRSA Certificate & KeyNormallocalhost.localdomainMar 24, 2032
f5-ca-bundleRSA CertificateEntrust Root Certificat…Dec 8, 2030
f5-iruleRSA Certificatesupport.f5.comJul 19, 2027
1hirotanoblog.workRSA KeyNormal
図4 秘密鍵を登録したあとの一覧(実際の画面ではなく、表示のポイントを示したイメージです)

サーバ証明書のインポート

一覧で、STEP 1 で登録した hirotanoblog.work をクリックします。まだ証明書がないので、Certificate Subject(s) は No certificate です。ここで Import をクリックします。

BIG-IP 設定画面(hirotanoblog.work)画面イメージ
General Properties
Namehirotanoblog.work
Partition / PathCommon
1Certificate Subject(s)No certificate
2Import…Create…
図5 秘密鍵だけが入った項目(実際の画面ではなく、表示のポイントを示したイメージです)

Import Type は Certificate、Certificate Name は /Common/hirotanoblog.work に決まった状態で表示されます。Certificate Source で Upload File を選び、手元のサーバ証明書 server-cert.pem を選んで Import をクリックします。

BIG-IP 設定画面(Configuration Utility)画面イメージ
SSL Certificate/Key Source
Import TypeCertificate
Certificate Name/Common/hirotanoblog.work
1Certificate Source◉ Upload File○ Paste Text
ファイルを選択 server-cert.pem
Free Space on Disk3989 MB
Cancel2Import
図6 サーバ証明書のインポート(実際の画面ではなく、設定項目のポイントを示したイメージです)

一覧に戻ると、hirotanoblog.work の表示が変わります。

BIG-IP 設定画面(SSL Certificate List)画面イメージ
System ›› Certificate Management : Traffic Certificate Management : SSL Certificate List
NameContentsKey SecurityCommon NameExpiration
ca-bundleCertificate BundleJun 24, 2022 –
Oct 6, 2046
defaultRSA Certificate & KeyNormallocalhost.localdomainMar 24, 2032
f5-ca-bundleRSA CertificateEntrust Root Certificat…Dec 8, 2030
f5-iruleRSA Certificatesupport.f5.comJul 19, 2027
hirotanoblog.work1RSA Certificate & KeyNormal2www.hirotanoblog.work3Jul 17, 2022
図7 サーバ証明書を取り込んだあとの一覧(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1Contents:RSA Certificate & Key証明書と秘密鍵の両方がそろった項目になりました。
2Common Name:www.hirotanoblog.workサーバ証明書の Subject の CN です。
3Expiration: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 をクリックします。

BIG-IP 設定画面(Configuration Utility)画面イメージ
General Properties
1Namehirotanoblog.work
Parent Profileclientssl
Configuration: Basic2Custom ☑
3Certificate Key Chain/Common/hirotanoblog.work /Common/hirotanoblog.workAddEditDelete
OCSP Stapling☐
Notify Certificate Status to Virtual Server☐
Proxy SSL☐
Proxy SSL Passthrough☐
CancelRepeat4Finished
図8 Client SSL プロファイルの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Nameプロファイルの名前です。この記事では hirotanoblog.work にします。
2Customチェックを入れると、親プロファイル(Parent Profile:clientssl)から引き継いだ設定を変えられるようになります。
3Certificate Key ChainAdd をクリックし、次の画面で証明書と秘密鍵を選びます。追加すると、上の枠に「証明書 秘密鍵」の組が表示されます。
4Finishedクリックすると、プロファイルが作成されます。

Certificate Key Chain の Add をクリックすると、次の画面が開きます。Certificate(サーバ証明書)と Key(秘密鍵)の両方で hirotanoblog.work を選び、Add をクリックします。

Add SSL Certificate Key Chain画面イメージ
1Certificatehirotanoblog.work
Keyhirotanoblog.work
ChainNone
Passphrase​
2AddCancel
図9 証明書と秘密鍵の組を追加する(実際の画面ではなく、設定項目のポイントを示したイメージです)

Chain は、サーバ証明書とルート証明書の間に中間証明書がある場合に、その中間証明書を選ぶ項目です。この記事の証明書はルートの認証局が直接署名しているので、None のままにします。秘密鍵にパスフレーズを付けていないので、Passphrase も空のままです。

Finished をクリックしたあと、Client SSL プロファイルの一覧に hirotanoblog.work が追加されていることを確かめます。

BIG-IP 設定画面(Client SSL プロファイル一覧)画面イメージ
NameParent ProfilePartition / Path
clientssl(none)Common
clientssl-insecure-compatibleclientsslCommon
clientssl-quicclientsslCommon
clientssl-secureclientsslCommon
crypto-server-default-clientsslclientsslCommon
1hirotanoblog.workclientsslCommon
splitsession-default-clientsslclientsslCommon
wom-default-clientsslclientsslCommon
図10 作成した Client SSL プロファイル(実際の画面ではなく、表示のポイントを示したイメージです)

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) に作ったプロファイルを入れます。

BIG-IP 設定画面(Configuration Utility)画面イメージ
General Properties
NameWeb-VS
TypeStandard
Source Address0.0.0.0/0
Destination Address/Mask10.0.1.100
1Service Port◉ Port○ Port List
443 HTTPS
Availability Available (Enabled) – The virtual server is available
StateEnabled
Configuration: Basic
ProtocolTCP
HTTP Profile (Client)http
⋮ (中略)
2SSL Profile (Client)
Selected/Commonhirotanoblog.work<<
>>
Available/Common
clientssl
clientssl-insecure-compatible
clientssl-quic
clientssl-secure
…
3UpdateDelete
図11 Web-VS に Client SSL プロファイルを適用する(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1Service Port443(HTTPS)に変えます。もとは 80(HTTP)です。
2SSL Profile (Client)Available の一覧から hirotanoblog.work を選び、<< ボタンで Selected に移します。
3Updateクリックすると設定が反映されます。

Pool のメンバーは 80 番のままです。Virtual Server が 443 番で受けた通信を、BIG-IP が復号して Web-01:80、Web-02:80 に転送するので、サーバ側の設定は変えません。HTTP Profile (Client) に http を設定しているので、BIG-IP は復号したあとの HTTP の中身も扱えます。

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 でサーバに転送できています。

クライアントのブラウザ(Chrome)画面イメージ
1▲ 保護されていない通信 | https://www.hirotanoblog.work
2Web-01Web サーバのページ
証明書の表示
3証明書のパスCA-hirotanoblog › www.hirotanoblog.work
発行元CA-hirotanoblog
有効期限2022年7月17日 日曜日 1時07分09秒 日本標準時
状態 この証明書は有効です
シリアル番号00 CF 94 98 44 EC B5 28 DE
図12 https://www.hirotanoblog.work へのアクセス結果と証明書の表示(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1保護されていない通信(赤)Chrome がこのサーバ証明書を安全と判断していないことを示します。理由は下で説明します。
2Web-01Pool のサーバ(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 のカウントが増えています。

BIG-IP 統計画面(Virtual Servers)画面イメージ
Statistics ›› Module Statistics : Local Traffic ›› Virtual Servers
Display Options
1Statistics TypeVirtual Servers
Data FormatNormalized
Auto RefreshDisabled
BitsPackets
StatusVirtual ServerPartition / PathInOutInOut
Web-VSCommon21.6M6.5M1.3K1.7K
図13 Virtual Server の統計(実際の画面ではなく、表示のポイントを示したイメージです)

Statistics Type で Pools を選ぶと、Pool 全体と、Web-01、Web-02 それぞれの In/Out のカウントが確かめられます。

BIG-IP 統計画面(Pools)画面イメージ
Statistics ›› Module Statistics : Local Traffic ›› Pools
Display Options
1Statistics TypePools
BitsPackets
StatusPoolPool MemberInOutInOut
Web-Pool682.2K5.9M474828
Web-01:80296.9K870.9K80126
Web-02:80585.3K5.0M394702
図14 Pool の統計(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1Statistics Type表示する統計の種類です。Virtual Servers と Pools を切り替えて見ます。
2Bits/Packets の In と OutVirtual 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 の ImportImport Type:Key、Key Name:hirotanoblog.work、server-key.pem
サーバ証明書SSL Certificate List で hirotanoblog.work を開いて Importserver-cert.pem(Contents が RSA Certificate & Key になる)
Client SSL プロファイルLocal Traffic ›› Profiles ›› SSL ›› Client の CreateName:hirotanoblog.work、Certificate Key Chain:hirotanoblog.work の証明書と秘密鍵
Virtual ServerLocal Traffic ›› Virtual Servers ›› Virtual Server List の Web-VSService Port:443、SSL Profile (Client):hirotanoblog.work

SSL アクセラレーションは、証明書と秘密鍵を BIG-IP に入れ、それを使う Client SSL プロファイルを Virtual Server に適用するだけで動きます。サーバ側は HTTP のままなので、既存の HTTP の負荷分散に後から足せます。証明書は、今のブラウザに合わせて SHA-256 などで署名し、SAN にホスト名を入れて用意してください。

コメント