SSLクライアントがサーバー名表示をサポートしていないかどうかを検出し、その場合に標準のHTTP Webサイトを提供できますか?


8

私はSSL SNIを使用する必要がありますが、残念ながら最近のCloudflareブログポストから、ネットワークの90%だけがそれをサポートしています。(たとえば、nginxを使用して)クライアントがSNIをサポートしているかどうかを検出し、WebサイトのHTTPバージョンに提供/リダイレクトするにはどうすればよいですか?これは可能ですか?他にどのようにしてSNIを使用してトラフィックの10%を失うことができませんか?有効な証明書がないとHTTPSトラフィックをHTTPにリダイレクトできないため、この要求は不可能であると想定しても正しいですか?

ありがとうございました。


密接に関連する質問がここで尋ねられました:ブラウザがSNIをサポートする場合にのみSSLにリダイレクトします
Simon East

回答:


10

最初からHTTPSを提供する場合は、クライアントが最初から受け入れた証明書を提供する必要があります。そうでない場合、クライアントはSSL接続を受け入れず、クライアントを別のサイトまたはHTTP専用バージョンにリダイレクトできません。これは、このケースをサポートすることを意味します

  • いずれかのドメインにすべて単一の証明書が含まれている必要があるため、非SNIクライアントに適切な証明書を提供できます。ただし、この場合、SNIはまったく必要ありません。
  • または、ほとんどの名前と一致しないデフォルトの証明書をインストールする必要があります。この場合、クライアントがこの不正な証明書を受け入れる場合にのみ、クライアントに別のページを提供するか、ページをリダイレクトすることができます。

最初からHTTPSを使用する必要がない場合、つまりクライアントが通常はプレーンHTTPで最初に接続する場合は、SNIサポートを検出して、後でクライアントをリダイレクトできるようにすることができます。これは、HTTPSサイトから画像、JavaScript、または類似のものを含めることによって行われる場合があり、ロードが成功した場合、クライアントがSNIをサポートしているか、証明書エラーを無視していることがわかります。

もちろん、これはすべてを中間者攻撃に対してオープンなままにします。中間者が行う必要があるのは、いくつかの異なる証明書を提供するか、HTTPSをまったく使用不可にすることです。この場合、接続をHTTPSにアップグレードします。さらに、中間者が代わりにSNIを使用する場合、これを使用して、クライアントがSNIをサポートしているように見せることができます。また、SNI以外のクライアントが影響を受けるだけでなく、SNI対応のクライアントのみ傍受できます。したがって、これは理論的には可能ですが、すべてを中間者で仲介し、HTTPSを使用することの主要なポイントを作成できるため、お勧めできません。


0

StackOverflowに投稿したように、SNIサポートをテストすることができるのは、それが必要になるのみです。つまり、ユーザーがSNI HTTPSを強制的に使用できず、サポートしていない場合はフォールバックできません。続行できないため、このようなエラーが(Windows XPのChromeから)表示されるためです。

そのため、(残念ながら)ユーザーは実際には安全でないHTTP接続を介して開始し、SNIをサポートしている場合にのみアップグレードする必要があります。

SNIサポートは次の方法で検出できます。

  1. リモートスクリプト
    プレーンHTTPページ<script>から、宛先SNI HTTPSサーバーからをロードします。スクリプトがロードされて正しく実行されれば、ブラウザーがSNIをサポートしていることがわかります。

  2. クロスドメインAJAX(CORS)
    オプション1と同様に、HTTPページからHTTPSへのクロスドメインAJAXリクエストの実行を試みることができますが、CORSはブラウザのサポートに制限があることに注意してください。

  3. ユーザーエージェントをスニッフィングする
    これはおそらく最も信頼性の低い方法であり、ブラウザー(およびオペレーティングシステム)のブラックリストをサポートしていないことがわかっているか、サポートしている既知のシステムのホワイトリストを持っているかを決定する必要があります。

    Windows XP以下のIE、Chrome、OperaのすべてのバージョンがSNIをサポートしていないことはわかっています。サポートされているブラウザの完全なリストについては、CanIUse.comを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.