韓国で2019年2月中旬、政府が指定した有害なWebサイトへの接続が全面的にブロックされた。有害なサイトにはアダルトサイトなどが含まれている。そのブロックに利用されているのがSNIという技術だ。

 Webサイトへのアクセスを暗号化する技術としては、TLSという技術が広く使われており、Webサイトの常時TLS化も進んでいる。SNIは、TLSの拡張機能である。ホスティングサービス(レンタルサーバーサービス)などでTLSを適用すると不都合が生じるのを解決するために生まれた。

ドメインの証明書を使える

 HTTP/1.1では、同じIPアドレスを複数のドメインで共有できる「バーチャルホスト」という機能が導入された。Webブラウザーなどが送るHTTPリクエストの中に、アクセスしたいドメイン(正確にはホスト)の名前を含ませることで、同じIPアドレスで違うWebサーバーにアクセスできるようにする仕組みだ。

 1つのIPアドレスで様々なWebサイトにアクセスできるようになるので、IPアドレスの消費を抑えることができる。ホスティングサービスなどで広く使われている。

 ところが、バーチャルホストを利用しているWebサーバーにTLSを適用しようとすると、問題が発生する。本来はドメインごとのサーバー証明書を使うべきなのに、共通のサーバー証明書しか使えなくなってしまう(図1)。

図1●SNIを利用しない場合
TLSではサーバーがパソコンにサーバー証明書を返す必要があるが、暗号通信の前は、どのドメインにアクセスするかがまだ分からない。このため共通のサーバー証明書しか使えない。
[画像のクリックで拡大表示]

 ユーザーがWebブラウザーにURLを打ち込むと、WebブラウザーはDNSサーバーにアクセスして、URLに含まれるドメイン名に対応するIPアドレスを取得する。このIPアドレスを使ってWebサーバーにアクセスする。

 WebサーバーがTLSを使っていると、暗号通信を確立するためにパソコンにサーバー証明書を返す必要がある。ところが、HTTPリクエストが送られるのはTLSによる暗号通信が始まった後だ。バーチャルホストを利用している場合、そのタイミングで初めてユーザーがアクセスしたいドメインが分かる。

 つまり、サーバー証明書を返す時点では、ユーザーがどのドメインにアクセスしたいのかが分からない。このため、複数のドメインで利用できる共通のサーバー証明書を返すしかない。

 この問題を解決するために生まれたのがSNIだ。いわばバーチャルホストをTLSに対応させるための機能である(図2)。

図2●SNIを利用する場合
SNIではやりとりの最初にユーザーがアクセスしたいドメインを平文でWebサーバーに伝える。これにより、そのドメインのサーバー証明書を使って暗号通信できる。
[画像のクリックで拡大表示]

 SNIでは、暗号通信を確立するためのTLSでのやりとりの最初に、ユーザーがアクセスしたいドメインをWebサーバーに伝える。これにより、そのドメインのサーバー証明書を使って暗号通信を確立できる。ほとんどのWebサーバーソフトウエアやWebブラウザーが対応しているため、現在ではホスティングサービスなどを中心に広く使われている。

▼SNI
Server Name Indicationの略。
▼TLS
Transport Layer Securityの略。

この先は有料会員の登録が必要です。「日経NETWORK」定期購読者もログインしてお読みいただけます。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら