UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【SSL/TLS】SNIとは?

FastlyのFastly TLSサービスを調べていたところ

SNI拡張を使って、「クライアントが通信したいホスト名をサーバに通知できるようにしている」っていう話がわからなかったのでSNIについて調べた

このへん

By default, Fastly installs TLS certificates at a shared set of IP addresses. When client requests get sent to Fastly, we select the correct certificates using the SNI extension of TLS that allows clients to present a hostname in the TLS handshake request.

https://docs.fastly.com/products/tls-service-options#fastly-tls

SNIとは

Wikipediaより

Server Name Indication(SNI、サーバー ネーム インディケーション、サーバ名表示)は、SSL/TLSの拡張仕様の一つである。SSLハンドシェイク時にクライアントがアクセスしたいホスト名を伝えることで、サーバ側がグローバルIPごとではなくホスト名によって異なる証明書を使い分けることを可能にする。

ちょっと古い記事だがこちらの記事がわかりやすかった

jp.globalsign.com

SNIを使わない場合の問題点(上記記事の引用)

そこでSNIを使うと

  • クライアントはSSLハンドシェイクの際に「これから通信したいサーバのドメイン名」をサーバに通知することができるようになる
  • サーバは「どのドメインに対応するSSLサーバ証明書を利用すべきか」を判断することができる

FastlyはこのSNIを使って独自ドメインHTTPS通信できるようにしているってことがわかった

デメリットとして昔はブラウザのサポート状況があげられていたが、最近のブラウザはすべてSNIをサポートしているとのことなので問題ない
(サポートしていないのはWindows XPAndroid 2.x以前など)