2012-03-15 6 views
7

sslセッションでクライアント証明書を使用してユーザーを認証していますが、キャッシュされたセッションに問題があります。 (私は(必要ない)クライアント証明書を受け入れるようにIISを構成しました)javascriptからSSLクライアント証明書の状態を消去します。

通常状況: ユーザーがページにアクセスすると、証明書が要求されます。ブラウザが証明書セレクタを起動し、ユーザーが必要な証明書を選択し(必要に応じてPINを挿入する)、すべてが順調に進みます。

状況が正常に動作しなかった: ユーザーがページにアクセスすると、証明書が要求されます。ブラウザが証明書セレクタを起動し、ユーザが必要な証明書を選択した後、PINダイアログをキャンセルします。証明書が送信されなかったため、ユーザーは前のページにリダイレクトされます。ユーザーは再度ログインしようとしますが、最後のsslセッションがキャッシュされたため自動的に失敗します。

私はこれを、つまりdocument.execCommand( "ClearAuthenticationCache")を使用して解決しました。 FFやクロムでは機能しません。そのようなメソッドをサポートしていないからです。これを解決するにはどうにかしていますか?

答えて

6

this discussionthis Chromium issueに興味があるかもしれません。特に、あなたは試してみてください:Chromeの

if (window.crypto) window.crypto.logout(); 
+0

それはそうですそれは解決するために時間がかかるでしょう...クロムで暗号を使用すると、これは私にこれを与えます:TypeError:Object#にはログアウトのメソッドがありません。 開発者によると、DOMCryptoは成熟した後に実装するだけで、実装された暗号はほとんど実装されません。 http://www.mail-archive.com/[email protected]/msg16213.html 重要部分: 「これを有効にする意図がないことを再確認したいです。 このAPIを試してみると、WebKitの他のコンシューマーにはほとんど影響がありません。」と述べています。 – RicardoSBA

+1

@RuhollahDelpakによって指摘されているように、これは最近のリリースでは機能しなくなりました。 – Bruno

3

を(少なくとも19.0.1084.30ベータで)、あなたがクライアント証明書が必要ですが、すべての証明書を拒否し、同じホスト名にURLを設定することができれば、と思われますそのURLへのリクエストを行うと、window.crypto.logout()と同じ効果が得られます。 IE6 +で

var xmlHttp = new XMLHttpRequest(); 
xmlHttp.onreadystatechange = function() { 
    // put any actions to carry out upon logout here 
}; 
xmlHttp.open("GET", "/ssl_logout/", true); 
xmlHttp.send(); 

+0

どのようにApacheやnginxでこのようなURLを設定しますか? –

+0

それも可能ですか? SSLネゴシエーションは、URLが送信される前に行われます(AFAIK)。 –

+1

@DavidBalažic:[SSLVerifyClient'のApacheのドキュメント](http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslverifyclient)によれば、ディレクトリや.htaccessレベルで使用することができますが、私は交渉が行われ、接続が確立され、Apacheがもう少し作業をし、証明書を拒否できると想像していましたが、基本的なメカニズムについては十分に分かりません。 HTTPSが確実に、またはどうなるかを知ることができます。投稿時に私の答えがうまくいったことを確認しました(Apacheと思っています)。 – Isaac

1

:たとえば、/ssl_logout/は特別に構成されたURLの場合は(あまりにもsrc="/ssl_logout/"作品、とiframeまたはimgを含むページを使用する。):

document.execCommand('ClearAuthenticationCache'); 
+0

ユーザーが証明書を選択しなかった場合、これは機能しません。彼はブラウザを再起動する必要があります。私が他の解決法を知らない限り。 –