3

SSLのクライアント証明書を要求するように構成されたWebサーバーがあります。クライアントが受け入れ可能な証明書を持っている場合、実際のコンテンツが表示されますが、そうでない場合は、クライアント認証なしでSSLにフォールバックし、セキュリティトークンを接続して再試行するように通知するエラーページを表示します。

問題は、トークンを接続しても、ブラウザは現在のセッションが正常であると見なすため、新しいSSLセッションを再ネゴシエートしないことです。したがって、現在のSSLセッションを無効にする方法が必要です。

Tomcat6であるサーバーでそれを実行しようとしました。

response.setHeader("Connection", "close");          // open new socket next time
response.flushBuffer();

Object sslSessionMgr = request.getAttribute("javax.servlet.request.ssl_session_mgr");
if (sslSessionMgr != null) {
    try {
        Method invalidateSession =
                Class.forName("org.apache.tomcat.util.net.SSLSessionManager").getMethod("invalidateSession");
        invalidateSession.setAccessible(true);
        invalidateSession.invoke(sslSessionMgr);
    } catch (Exception e) {/*ignore*/}
}

しかし、それsslSessionMgrは常にそうnullであり、私はここで何が間違っているのだろうかと思います。

もちろん、クライアントには普遍的な解決策はありませんが、幸いなことwindow.crypto.logout()にFireFoxのトリックを実行します。document.execCommand("ClearAuthenticationCache")IEに相当するものは、ActiveXコントロールである、または多分、ActiveXコントロールであるとどこかで読んだことがありますか?いずれにせよ、IEやChromeではできないようです。

だから私はここで何ができますか?これらの解決策のいずれかを修正できますか、または他の解決策はありますか?

4

1 に答える 1

2

残念ながら、この問題で説明されているように、これは Chrome ではまだサポートされていません。

私の知る限り、このjavax.servlet.request.ssl_session_mgrトリックは Apache Tomcat 7 からしか利用できません。

于 2012-04-19T13:38:11.683 に答える