概要

HTTPSについて調べていると、SNIという用語が出てくることがあります。

私はこのSNIについて、あまり理解できていなかったので今回調べてみたことをここにまとめておきます。

HTTPSについて

HTTPSは、一言で言うと通常のHTTP通信のセキュリティを強化して、通信の途中で通信を傍受されても理解されないようにするというものです。

そのため、HTTPSで通信をするからといって通信を覗き見られることはあるのですが、暗号化されているため、復号(暗号を解除)するのは難しくなっています。

少し話が変わるのですが、HTTPSで通信をする場合は、それぞれのドメインに応じてSSL証明書が必要です。SSL証明書は、証明書という場合もあります。

ひとつのWebサーバにひとつのドメインが割り当てられていて、アクセスがあった場合にはその証明書を使う場合は簡単なのですが、ひとつのWebサーバで複数のドメインが設定されている場合は、通信が暗号化されているため、どのドメインでアクセスしているのか分からず、適切な証明書を選択することができません。

そこで登場するのがSNIです。

SNIについて

SNIは、ひとつのWebサーバで複数のドメインのHTTPSサイトを運用したい場合に使います。

SNIを使うことによって、Webサーバはどのドメインでアクセスしているのかを知ることができます。そのため、適切な証明書を選択することができ、複数のドメインのHTTPSサイトを運用することができます。

SNIとは、Server Name Indicationの略です。直訳すると「サーバ名の表示」となり、SNIのイメージとしては、HTTPS通信の際、Webサーバにどのドメインでアクセスしているのかを教えていると考えるのが分かりやすいと思います。

ちなみに、最近のWebサーバはデフォルトでSNIが使えるようになっているので、何か特別なことをする必要はありませんが、サポートが終了しているような古いブラウザではSNIに対応しておらず、このようなSNIを使うWebサーバにアクセスできないということがあります。

さいごに

最近のWebサーバやブラウザは、このSNIに対応しており特別な設定をしなくても使えるようになっているため、SNIを意識する必要はないです。

知識として覚えておきましょう。