SNI
SNIはTLSプロトコルに追加され、サーバーが同じIPアドレスで複数のTLS証明書をホストできるようにします。
概要
Server Name Indication
SSL/TLS拡張仕様
SSLハンドシェイク時にクライアントがアクセスしたいホスト名(ドメイン名)を伝える
SSLではドメイン名が知れるのはSSLセッション確立後だが、SSLセッションを確立するためにドメイン名の情報が必要。これが問題/icons/point.icon
SNI自体(ドメイン名をお知らせする通信)は平文
SNIが必要なケースと必要じゃないケース
SNIが必要ない
一つのグローバルIPで証明書が一つ
一つのドメインしか運用していない
来たリクエストに対して全てその証明書を返せばいいだけ
SNIが必要ある
一つのグローバルIPで証明書が複数
/icons/point.iconどの証明書でSSLハンドシェイクすれば良いのか判定できない
VPSとかレンタルサーバーとか
実際にさくらのレンタルサーバーでは1つのIPアドレスを多くのユーザーで共有している
SNIでSSLハンドシェイク時にクライアントがドメイン名を送ることでサーバーは適切な証明書を選択できる
ESNI
Encrypted SNI
TLSハンドシェイク(ClientHello)のSNIを見られるとユーザーが訪問しているwebサイトが特定される
ESNIではSNIの部分を暗号化する
DNSへの名前解決の通信は保護されていない
DoHとの併用が求められる
ESNIはDNS保護とペアで初めて意味あるものになる
資料
wiki
SNIとは?TLS Server Name Indicationの仕組み