SSL ハンドシェイクが失敗した場合の Apache HTTP フォールバック

SSL ハンドシェイクが失敗した場合の Apache HTTP フォールバック

私はとても特定のユースケース。Apache を使用して、ユーザーのブラウザが最新の CipherSuites を使用できるかどうかを確認したいと思います。

Apache は https で呼び出され、SSL 接続を確立しようとします。これが失敗した場合、Apache はユーザーをフォールバック HTTP サイトにリダイレクトし、ブラウザーが古くなっていることをユーザーに通知します。

もちろん、mod_rewrite を使用する必要があります。mod_rewrite には、SSL が確立されているかどうかに応じて、オン/オフを含む https 変数もあります。しかし、最初の SSL ハンドシェイクが失敗した場合に Apache に続行するように指示するにはどうすればよいでしょうか?

答え1

クライアントは SSL 接続を確立しようとし、それが失敗した場合、Apache はユーザーをフォールバック HTTP サイトにリダイレクトし、ブラウザーが古くなっていることをユーザーに通知します。

それはできないと思います。TLS ハンドシェイクは、クライアントと Web サーバーが HTTP プロトコル メッセージを交換できる段階よりかなり前の段階で失敗します。

その代わり:

  1. すべての暗号を受け入れます。
  2. そして、強いものから弱いものへと順番に並べますSSLCipherSuite ...指令。
  3. クライアントが暗号の優先順位を決定できるようにするのではなく、ステップ2で決定した優先順位に従ってネゴシエートします。SSLHonorCipherOrder on 指令。
  4. それすべきクライアントがサポートする最も強力な暗号を使用した接続が実現します。(理論上は、実際の結果は異なる場合があります。)
  5. その暗号がしきい値を下回る場合は、セキュリティ メッセージを表示するロジックを適用します。
  6. 強力な暗号が本当に必要なコンテンツを保護しますマニュアルで説明されている

つまり、次のようなものです:

# be liberal in general
SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
SSLHonorCipherOrder on

<Location "/strong/area">
# but https://hostname/strong/area/ and below
# requires strong ciphers
SSLCipherSuite HIGH:!aNULL:!MD5
</Location>

関連情報