big-ip でSNI (Server Name Indication)

SNI SSL/TLSの拡張仕様
HTTPS でのname baseのvirtualhostを利用するためのもの

(ワイルドカード証明書/マルチドメイン証明書はまた別の話なのでここでは置いておく)

# 従来
HTTPの場合はhostヘッダでvirtualhostを振り分け可能だけど、HTTPSの場合はwebサーバがhostヘッダを解釈するまえにSSL暗号処理が入るのでhostヘッダが識別できないので、1つの証明書ごとに個別のIPアドレス(or 別port)を用意する必要があった。
(IPは同じでportを8443などの別portを使っても良いが普通は443で公開するのでそれもここでは考慮しない)

SNIを使えばTLSの処理でhostを渡すので1つのIP:portで複数の証明書の適用が可能。もちろんブラウザ/サーバともにSNIに対応している必要あり

対応してないブラウザからアクセスした場合、サーバ側の設定で以下の2通りになる。

  • 接続を拒否
  • Defaultで定義しているvirtualhostへ振り分け (この場合アクセスした名前によっては証明書と一致してない警告出る?)

big-ip

本題

big-ipがSNIに対応したのはv11以降なので、v10ではできない。(VirtualServerで1つしかclientssl profileを選べない)

SNI非対応のブラウザからアクセスがあった場合は拒否せずにDefaultのprofileに向ける場合の設定
  1. defaultにしたいprofile
    1. "Default SSL Profile for SNI" にチェック
    2. Server Nameは入れなくてもよい。
  2. default以外のprofile
    1. Default SSL Profile for SNIのチェックを外す
    2. Common Nameと同じならServer Name入れなくていい

Server NameはCommon Nameを明示的に入れておくのも良い。
SANsのようにwwwあり、なしを同時に対応はできないので、parent profileなどを利用してServer Nameだけ変えるprofileを複数作る必要あり。

あとは公開するvirtualserverssl profile(client)でSNIを利用したいprofileを複数選択する。

追記

sniでまとめるclientsslのprofileは全て同じCipherにしておくこと。(他にもオプションあわせないといけないのがあるかも)
一方はDEFAULT、もう一方はDEFAULT:!RC4 などとしていると
Selected client SSL profiles do not match security policies for Virtual Server
というエラーになる。

追記2

profileのServer Nameは必ずしも入力しなくてもよさそう。
空の場合は証明書のCommon Name から拾った値として設定されるみたい。

If no value is specified, the system uses the Common Name value from the default certificate.
The default for this setting leaves the name blank.