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とは
Server Name Indication(SNI、サーバー ネーム インディケーション、サーバ名表示)は、SSL/TLSの拡張仕様の一つである。SSLハンドシェイク時にクライアントがアクセスしたいホスト名を伝えることで、サーバ側がグローバルIPごとではなくホスト名によって異なる証明書を使い分けることを可能にする。
ちょっと古い記事だがこちらの記事がわかりやすかった
SNIを使わない場合の問題点(上記記事の引用)
- SSL/TLSでは「同じサーバ(同じグローバルIPアドレスを利用する複数のユーザ)は1つのSSLサーバ証明書しか使えない」
- このままだと、レンタルサーバのような「同じサーバを複数のユーザが利用し、なおかつユーザごとに異なるドメインを利用する」場合に困る
そこでSNIを使うと
- クライアントはSSLハンドシェイクの際に「これから通信したいサーバのドメイン名」をサーバに通知することができるようになる
- サーバは「どのドメインに対応するSSLサーバ証明書を利用すべきか」を判断することができる
FastlyはこのSNIを使って独自ドメインでHTTPS通信できるようにしているってことがわかった
デメリットとして昔はブラウザのサポート状況があげられていたが、最近のブラウザはすべてSNIをサポートしているとのことなので問題ない
(サポートしていないのはWindows XP、Android 2.x以前など)