はじめに
まだ以下の記事をお読みいただいていない方は、本稿より先にそちらをお読みください。
SNIとは
SNI(Server Name Indication)とは、SSL/TLS拡張仕様の1つで、1つのサーバー(IPアドレス)に対し、複数のホスト名の証明書を設定するための技術/仕様です。
SNI登場前のSSL状況
SNIの技術が登場する以前のインターネットでは、1つのIPアドレスに対しては、1つのホスト名に対応するSSL証明書しか設定できませんでした。
当時のSSL/TLS通信では、名前ベースバーチャルホストの通信より先に、SSLセッションを確立していたため、この時点ではクライアントのアクセス先ホストをサーバー側が判断できないというのがその理由です。
この問題を回避するには
1つのサーバー証明書に複数のホスト名を追加しておく
もしくは
SSLを利用するホスト名ごとにバーチャルIPアドレスを追加する
といった手段が用いられました。
しかし前者は実運用上現実的ではなく、後者はIPv4アドレス枯渇問題によるコスト高という問題がありました。
SNIの登場
SNIの拡張仕様ではこの問題の解決のために、SSLセッションの確立時(ハンドシェイク時)にクライアントがサーバー側にホスト名を伝えられるようになりました。これにより、バーチャルホスト同様、1つのIPアドレスに対して複数のSSL証明書を設定することができるようになりました。
SNIの問題点
SNIは拡張仕様であるため、クライアントおよびサーバー双方がSNIに対応している必要があります。
SNIに対応していないクライアントの例を以下に挙げます。
・Windows XP以前の全ブラウザ
・IE 6以前
・ほとんどの、いわゆる「ガラケー」ブラウザ
これらのクライアントでは、SNIを利用したHTTPS通信を行うことができません。
SNI登場時は、まだWindows XPがほぼ「現役」であり、サーバー側でSNIの導入を見送られる向きもありましたが、2022年5月現在では、HTTPS通信の多くがSNIを利用しているため、非対応クライアントは、無視できるレベルと言って差し支えないかと思われます。 社内システムなどで、どうしてもSNI非対応クライアントに対応したい場合は、ご利用のレンタルサーバーにご相談ください。