本文へスキップ
ecdsa.com

SNI(Server Name Indication)

クライアントが接続したいホストの名前を伝える TLS の拡張(RFC 6066 §3、拡張番号 0)で、これにより 1 つの IP アドレスで多数の証明書を使い分けられます。Encrypted Client Hello を使わない限り、平文で送信されます。
別表記Server Name Indicationserver_nameTLS SNI

クライアントは server_name に DNS のホスト名を入れ(IP アドレスは不可で、RFC 6066 はアドレスをそのまま入れることを禁じています)、サーバーはそれを使って証明書と設定を選びます。SNI がないと、サーバーはデフォルトの証明書にフォールバックします。これは、クライアントが SNI を省略したときに「証明書のホストが違う」状態になる典型的な原因で、たとえば古いバージョンで -servername を付けずに実行した openssl s_client や、設定を誤った HTTP クライアントで起こります。

平文の名前はネットワークから見えるため、フィルタリング、検閲、分析に利用されています。Encrypted Client Hello(RFC 9849)は、本来の名前を暗号化された内側の ClientHello に移し、外側の ClientHello には共有の公開名だけを示します。

規格と参考文献

すべての用語