Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

SNI(エスエヌアイ)とは | 意味や読み方など丁寧でわかりやすい用語解説

SNI(エスエヌアイ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

サーバ名表示拡張 (サーバメイヒョウジカクチョウ)

英語表記

SNI (エスエヌアイ)

用語解説

SNIはServer Name Indicationの略で、TLS(Transport Layer Security)プロトコルの拡張機能の一つである。これは、一つのIPアドレスで複数のHTTPSウェブサイトを運用することを可能にする重要な技術である。インターネット上では、ドメイン名とIPアドレスは通常一対一で対応するわけではなく、一つのIPアドレスが複数のドメイン名をホストすることが一般的である。これは特にウェブサーバーにおいて「バーチャルホスト」と呼ばれる技術によって実現されており、HTTP通信においては以前から広く利用されてきた。クライアントがウェブサーバーに接続する際、HTTPリクエストヘッダに含まれるHostフィールドによって、どのドメイン名宛の通信であるかをサーバーに伝えるため、サーバーはこれに基づいて適切なウェブサイトのコンテンツを返せる。

しかし、HTTPS通信では状況が異なる。HTTPSはTLSプロトコルによって暗号化されており、通信の安全性を確保するためにサーバー証明書が利用される。クライアントはサーバー証明書を検証することで、接続先のサーバーが意図したドメインのものであることを確認する。TLSハンドシェイクの初期段階で、クライアントはサーバーからサーバー証明書を受け取る必要がある。このとき、もし一つのIPアドレス上で複数のドメイン名(例えばexample.comとanothersite.com)がHTTPSサービスを提供している場合、サーバーはクライアントがどのドメイン名に接続しようとしているのかを知る手段がない。結果として、サーバーはどれか一つのデフォルトの証明書を返さざるを得なくなり、クライアントは接続しようとしたドメイン名と証明書に記載されたドメイン名が一致しないために、セキュリティ警告を発するか、あるいは接続自体を拒否してしまう事態が発生していた。これがSNIが登場する以前のHTTPSにおける大きな課題であった。

この課題を解決するために導入されたのがSNIである。SNIの仕組みは比較的シンプルである。クライアントはTLSハンドシェイクの最初のメッセージである「ClientHello」の一部として、接続しようとしているホスト名(ドメイン名)を平文でサーバーに通知する。サーバーはこのClientHelloメッセージに含まれるSNI情報を見て、そのホスト名に対応する適切なサーバー証明書を選択し、クライアントに送信する。これにより、クライアントは正しいサーバー証明書を受け取り、検証に成功し、安全なHTTPS通信を確立できるようになる。

SNIがもたらすメリットは大きい。まず、IPアドレスの節約である。特にIPv4アドレスは枯渇が懸念されており、一つのIPアドレスで複数のドメインを運用できることは、アドレス空間の有効活用に大きく貢献する。次に、サーバーリソースの効率的な利用である。一つの物理サーバーや仮想サーバーで複数のウェブサイトを効率的にホストできるようになり、サーバーの運用コスト削減にもつながる。証明書を導入する際にも、ドメインごとに専用のIPアドレスを用意する必要がなくなるため、コストや設定の複雑さが軽減される。

ただし、SNIを利用するためには、クライアントとサーバーの両方がSNIに対応している必要がある。過去には、Windows XP上のInternet Explorer 6以前のバージョンや、Android 2.x以前の古いモバイルOSなどがSNIに非対応であった。これらのSNI非対応クライアントから接続があった場合、サーバーは通常、デフォルトの証明書を返却するか、あるいは接続を拒否する動作をする。しかし、現在普及しているほとんどのモダンなウェブブラウザやOSはSNIに標準で対応しているため、一般的なウェブサイト運営において、SNI非対応のクライアントが問題となるケースは少なくなっている。ウェブサーバーソフトウェアについても、Apache HTTP Server、Nginx、Microsoft IISといった主要なサーバーは、比較的古いバージョンからSNIをサポートしている。

SNIはTLSハンドシェイクの初期段階でホスト名情報を平文で送信するため、通信を傍受する第三者は、どのドメイン名にアクセスしようとしているかを知ることができるという特性がある。ただし、その後の通信内容自体はTLSによって暗号化されるため、具体的なウェブページのコンテンツなどが漏洩することはない。このSNI情報の可視性という課題に対しては、ESNI(Encrypted SNI)や、より包括的なECH(Encrypted Client Hello)といった技術が開発され、実装が進められている段階にある。しかし、これらはSNIの基本的な機能とは別の、さらなるプライバシー強化のための技術であり、現在のHTTPS環境の基盤を支えるSNI自体の重要性や役割は変わらない。SNIは、セキュアなウェブ環境を効率的かつ広く普及させる上で不可欠な技術であり、現代のインターネットインフラにおいてその存在は非常に大きい。

関連コンテンツ