それほど興味のある人はいないだろうなあと思いつつも、個人的にまとめておいたほうがよさそうなのでまとめておきます。
やはりこの業界に身をおいている以上、新しい知識を入れて更新していかないといけないですからね。
ふと思い立って「ITパスポート」のCBT疑似体験をやってみたとき、このことを痛感しました。
全体では合格ラインに届いたものの、ストラテジ系、マネジメント系の正答率が悲惨でした。
これは勉強し直さないといけないなと思っていたタイミングで、SNIのことを目にしたので整理しておこうと思った次第です。
用語の整理
「TLS(Transport Layer Security)」プロトコルが利用できるWebサーバーで利用できるものが「SNI(Server Name Indication)」拡張です。
TLSが「プロトコル」、SNIが「拡張」ですから、TLSが利用できることが前提となります。
仕様に記載されたのが2003年6月ですから、新しい技術というわけではないんですね…
TLSのハンドシェイク手続きのタイミングで、対応したドメイン名の記載がある証明書を利用するということのようです。
ざっくりと概要をつかむ
そもそも前提の技術として「名前ベースバーチャルホスト」というものがあります。
古い時代はグローバルIPアドレスとドメインは1対1だったのに対して、1対nにできるようにする技術が「名前ベースバーチャルホスト」です。
しかし「HTTPS通信(HTTP over SSL)」は、その名のとおり「SSLが先、HTTP通信があと」という形になります。
グローバルIPアドレスとSSL証明書が1対1という前提での通信になってしまうわけです。
そうなると、名前ベースバーチャルホストを利用しているサーバーでも、証明書が1種類しか利用できません。
これを名前ベースバーチャルホストと同様に名前ベースで解決してしまおうという拡張が「SNI」というわけです。
SNIによる証明書割り当ての流れ
概ね以下のような流れで通信や証明書割り当てが行われるようです。
- クライアントから対象ドメイン名を通知
- サーバーにて対象ドメイン名からSSLサーバー証明書を判断
- ドメインごとの通信経路を確立
- 暗号化通信を開始
暗号化通信前にドメイン名を利用して証明書を割り当てることで、名前ベースバーチャルホストと両立させているというわけですね!
サーバーに追加でグローバルIPアドレスを割り当てることもできますが、常時SSLが主流となっているうえにIPv4の枯渇問題もあります。
近年注目されるのも納得ですね!
ということで、SNIについて簡単に整理してみました。