ユーザーエージェントを確認して推測する以外に、HTTPリクエストを行うブラウザがSNIをサポートしているかどうかを確認する方法があるかどうかを知りたいです。
サーバー側またはクライアント側のオプションを検討します。
私がやりたいのは、同じPHPアプリケーションを指す複数のドメインのSSL証明書を設定することです。次に、リクエストを行っているクライアントがSNIをサポートしているかどうかを確認し、サポートしている場合は、SSL対応バージョンにリダイレクトします。
ユーザーエージェントを確認して推測する以外に、HTTPリクエストを行うブラウザがSNIをサポートしているかどうかを確認する方法があるかどうかを知りたいです。
サーバー側またはクライアント側のオプションを検討します。
私がやりたいのは、同じPHPアプリケーションを指す複数のドメインのSSL証明書を設定することです。次に、リクエストを行っているクライアントがSNIをサポートしているかどうかを確認し、サポートしている場合は、SSL対応バージョンにリダイレクトします。
まず、現在SNIをサポートしているブラウザを知っています。
Opera 8.0; MSIE 7.0(ただし、Windows Vista以降のみ)。Firefox2.0およびMozillaPlatformrv:1.8.1を使用するその他のブラウザ。Safari 3.2.1(WindowsバージョンはVista以降でSNIをサポートします); Chrome(WindowsバージョンはVista以降のSNIもサポートしています)。
したがって、安価な方法はブラウザを判別することであり、それが上記のいずれかである場合は、SNIがあります。
これはベストプラクティスではありませんが(機能検出を優先)、SNI検出にはSSLハンドシェイクが必要なため、これを回避する方法はないようです。したがって、SSL証明書が失敗した後、何かを行うには遅すぎます。