2009-11-25 12 views
9

ブラウザベースのアプリケーションが1つあり、入力時に再認証する必要があります。そのURLにアクセスする際にPINプロンプトを表示して再認証する必要があります。それを行う合理的な方法はありますか?CACスマートカードの再認証

追加情報:これはCACカード用で、ワークステーションにはActivIdentityとTumbleweedがあります。また、必要に応じてワークステーションにサービスを追加することもできます。ブラウザはすべてIE7です。 WebサーバーはIIS 6で、ページはASP.NET(主に)で書かれています。

+0

この問題の解決方法を教えてください。 :) –

+1

@ケビン私は、CACカードのピンタイムアウトがブラウザから完全に独立していることを顧客に説明することによって要件を押し戻しました。セキュリティの観点からは、通常の機能を妨害しようとするのは良い考えではありません。彼らのセキュリティ担当者は、毎回クライアントにピンを再入力させる必要はないと同意しました。より良いアプローチは、期限が切れた場合にのみ再入力することです。 – adg

答えて

10

ここにはいくつかの異なるソフトウェアが含まれています。

最初はカードそのものです。デジタル署名を実行するには、CACが「検証済み」の状態でなければなりません。つまり、カードが挿入された後にPINが入力されたことを意味します。それを超えると、カードの各キーには、そのキーが使用されるたびにPINを入力する必要があるかどうかを示すフラグが付きます。私はチェックしていませんが、これはCAC上の "電子メール"キーペアに設定されていると思います。したがって、この「常に検証」フラグが設定されているキーを見つけ、そのキーのみを受け入れるようにサービス上のパス検証ツールを設定する必要があります。拡張キーの使用で特定のOIDを要求するか、DoD中間証明書の一部をパス構築から除外することができます(恐らく取り消されたとしてフラグを立てます)。

カードを使用しているマシン上のミドルウェアは、操作を完了する前にPINが必要であることをカードが示すと、PINをキャッシュしてカードに提供することもできます。私はActivClientがバージョン6でPINキャッシング機能を使ってこれを行っていたと思うが、バージョン7ではこのオプションが欠落しているようだ。私はWindowsの組み込みPIVサポートでこのようなものは見つけられませんでした。この "機能"はセキュリティを脅かす可能性があるため、意図的に削除され、レジストリのハックやその他の動作を復元することはありません。これは、ユーザーのマシンを管理しない限り、制御できないものです。 PINの入力を強制するために使用できるHTTPヘッダーまたはTLSオプションはありません。しかし、新しいシステムでは、それは問題ではありません。

クライアント側で認証を実行するには、完全なハンドシェイクが必要です。有効なTLSセッションがある場合、クライアント認証は行われません。したがって、認証を要求する前にTLSセッションを無効にする方法(アプリケーションセッションではなく、おそらくHTTP Cookieに関連付けられている)を見つけるか、セッションが有効になっていない別のインターフェイスに認証要求を送信する必要があります。

+0

ありがとう、私はあなたが言っていることを理解していると思う。私は、サーバとワークステーション(数百台)の両方を大量に管理しているので、スマートカードにPINが必要なブラウザで何かできることがありますか? – adg

+0

そうです。ワークステーションを管理する場合は、すべてのカードリーダーソフトウェアをPINの入力を頻繁に要求するように設定することができます。たとえば、ActivClientをカードリーダーソフトウェアとして使用しました。それは実際にPINを尋ねるためにダイアログをポップアップさせるもので、ユーザーが再入力する頻度を制御する設定があります。 – erickson

+1

私はActivIdentity Experienceで誰かを見つけたのは幸いです。あなたの応答から、以前は見たことのないPINキャッシングサービスを見るようになりました。私は12のプロパティを見ることができ、そのうちの1つは "Enable PIN Caching"と呼ばれています。私はそれをオフにしようとします。 – adg

6

ウェブ上でスマートカードクライアント認証を行うには、標準のTLS/SSLまたはブラウザ用のカスタムプラグインの2つの方法があります。私はあなたが標準的なWebブラウザ(IE/FF/Safari)とSSL認証について話していると仮定します。

PINのために重要で二つ促しあります

  • のSSLセッションおよびSSLセッションキャッシュブラウザ
  • はミドルウェアがあり、関連する秘密鍵
  • 途中のオンカード認証状態実装されました。

最終的には、セキュリティ上の観点から、PINを「尋ねる」ことを知っているカードです - いくつかのカードとキーには、キー操作のたびにPINが必要です。 PINを一度読み取り、リーダーから取り除かれるか、アプリケーションによってリセットされるまで、鍵を認証済みの状態にしておきます。

スマートカードミドルウェア(Linuxの場合はPKCS#11、Windowsの場合はCryptoAPI/BaseCSPモジュール、OSXの場合はToken)はブラウザのキャッシュ内のセッションを再利用できない場合や接続が確立されている場合に必要です。カードのキーと話す。カードの認証状態でPINを入力する必要がある場合は、通常、ブラウザによってコールバックがトリガーされます。ミドルウェアがPINを必要としていることを知っている場合は、カードと話す前にPINを要求します。

PINの入力と実際に秘密鍵へのアクセス権の再認証とSSLセッションの再認証との間に1対1の関係はありません。

標準のSSLでは、ブラウザにSSLが実装される方法に依存し、クライアント側で100%信頼できる「PINを入力して再認証する」ことはできません。

Linuxを使用している場合は、OpenSC(AFAIKはCACカードを使用できます)でopensc.confの "transaction_reset"をtrueに設定すると、すべてのトランザクション後にカードがリセットされます(SSLセッションネゴシエーション)このようにして、新しいSSLセッションを開くたびに、ユーザーは再度PINを入力する必要があります。これはクライアント側の構成であり、サーバー起動の機能ではありません。

+0

素晴らしいコメントのためのマーティンありがとう。私はより多くの情報を提供すべきであったが、私はまだこの状況で何が意味があるかについてはほとんど知らない。 ワークステーションには、ActivIdentityまたはActivClientというミドルウェアがあります。このプロセスの名前はaccoca.exeです。彼らもタンブルウッドを実行しています。 – adg

+0

また、あなたのコメントから、私の挑戦は何とかカードにPINをもう一度尋ねる必要があることを納得させることであると私は思います。私はまだミドルウェアの仕組みを理解していないが、ユーザーがURLにアクセスしたときに、CACがPINを要求する必要があると判断するWebページに何かを入れることができると言うのは妥当だろうか? SSLセッションを強制終了する可能性がありますか? (申し訳ありませんが、それはダムのアイデアなら、私は少し混乱しています)。 – adg

+0

私はSSL状態をクリアすると(IE7-Tools-Internet-Content-Clear SSL状態を使用して、証明書を要求しますがPINは表示されません) – adg

0

あなたはブラウザがいくつかのブラウザでは、既存のSSLキャッシュを忘れさせるためにJavaScript関数を使用することができます。

function logout() { 
    // clear browser authentication cache 
    // IE specific 
    try 
    { 
     document.execCommand("ClearAuthenticationCache", "false"); 
    } 
    catch(e) 
    { 
     // do nothing 
    } 

    // clear for firefox or any browser that supports window.crypto API 
    if (window.crypto && typeof window.crypto.logout === "function") { 
     window.crypto.logout(); 
    } 
} 

あなたはログアウト機能の上に呼び出し、おそらく力にページをlogout.aspxするためにそれらをリダイレクトするためにJavascriptのsetTimeoutメソッドを使用することができます新しいPINを入力するクライアント。

ただし、JavaScriptを使用しており、コードはブラウザに依存し、すべてのブラウザで機能しません。

関連する問題