LoginSignup
5
8

More than 5 years have passed since last update.

BIG-IPでSNI(Server Name Indication)対応

Last updated at Posted at 2017-01-14

 はじめに

SNI(Server Name Indication)とは、SSL接続の開始時(SSLのハンドシェイクより前)に接続先のホスト名(FQDN)をクライアントがサーバへ送る仕組みです。これによってSSL接続の確立前にサーバが接続先のホスト名を知ることができます。

サーバからすると、ホスト名を確認してからSSLハンドシェイクの応答をすることになるので、要求されたホスト名にあったSSL証明書を利用したSSL接続を行えるようになります。

一つのグローバルIPアドレスでFQDNの異なる複数のサイトを運営しているとき、それぞれのサイト毎にSSL対応するために、SNIを用います。

以下では、BIG-IPのVirtual ServerをSNI対応する際の方法について記載します。

設定の流れ

BIG-IPで複数のSSL証明書をSNIで利用するには、簡単には以下のような流れになります。

Untitled.png

設定手順(GUI)

SSL証明書と秘密鍵のインポート

まず、SNIに利用したいサーバ証明書と秘密鍵をBIG-IPへインポートします。GUIではSystem→File Management→SSL Certificate List という箇所になります。

BIG-IP_SNI_SS1.png

ここでちょっと重要なのが、「Fallback用」の証明書と秘密鍵というもので、これは「どの証明書にもマッチしないSSL接続」に対して応答するための証明書です。FallBack用の証明書と秘密鍵もあらかじめ用意する必要があります。

Client SSL Profileの作成

次に、各証明書ごとにClient SSL Profileを作成します。各Client SSL Profileでは、Certificate, Key,そしてServerNameの設定が必要です。

ここの設定と(Client SSL Profileは設定項目が多く、1つのスクリーンショットで収まらないので分割します。)
BIG-IP_SNI_SS2.png

こっちの設定です。
BIG-IP_SNI_SS3.png

ただし、Fallback用証明書と紐づけるClient SSL Profileだけは、ServerNameを入力せず、代わりに「Default SSL Profile for SNI」を有効にします。

こんな感じに。
BIG-IP_SNI_SS4.png

Virtual ServerへのClient SSL Profileの適用

最後に、SSL接続を待ち受けるVirtual Serverに、作成した複数のClient SSL Profileを適用すればOKです。

Virtual Server設定の、該当部分です。
BIG-IP_SNI_SS5.png

補足:CLIでの設定について

CLIで設定する場合は、以下のようになります。

SSL証明書や秘密鍵のインポート

SSL証明書や秘密鍵のファイルを、BIG-IP内の任意のディレクトリ(/shared/tmpなど)へアップロードし、コマンドでファイルをBIG-IPのコンフィグ内に登録します。登録の際、指定のディレクトリへファイルはコピーされるので、アップロードしたファイルは削除して構いません。

ここでは証明書ファイルを「/shared/tmp/test.crt」、秘密鍵ファイルを「/shared/tmp/test.key」として、それをBIG-IPに「test-cert.crt」、「test-cert.key」という名前で登録する方法を記載します。
(こうすると、GUI上では証明書と秘密鍵をまとめて「test-cert」と表示します)

# tmsh
(tmos)# 
(tmos)# create sys file ssl-cert test-cert.crt source-path file:///shared/tmp/test.crt
Copying file "file:///shared/tmp/test.crt" ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
101  1216  101  1216    0     0  3710k      0 --:--:-- --:--:-- --:--:--     0
(tmos)# 
(tmos)# create sys file ssl-key test-cert.key source-path file:///shared/tmp/test.key
Copying file "file:///shared/tmp/test.key" ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1704  100  1704    0     0  4982k      0 --:--:-- --:--:-- --:--:--     0

Client SSL Profileの作成

Client SSL Profileを作成し、証明書と秘密鍵を紐付け、Server Nameを設定する方法です。3段階に分けていますが、一行でまとめて設定することも可能です。

# tmsh
(tmos)# 
(tmos)# create ltm profile client-ssl test.example.co.jp 
(tmos)# modify ltm profile client-ssl test.example.co.jp { cert-key-chain replace-all-with  { test-cert { cert test-cert.crt key test-cert.key } } }
(tmos)# modify ltm profile client-ssl test.example.co.jp server-name "test.example.co.jp" 

Virtual ServerへのClient SSL Profileの適用

ここでは、すでにVirtual Server"vs_example.co.jp_https"が存在していて、そこにClient SSL Profileを追加する方法を記載します。

# tmsh
(tmos)# modify ltm virtual vs_example.co.jp_https profiles add { test.example.co.jp { context clientside } } 

参考情報

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8