10

ユーザーが入力したときに再認証させたいブラウザベースのアプリケーションが 1 つあります。そのため、ユーザーがその URL にアクセスすると、再認証が必要になるように PIN プロンプトが表示されるようにします。それを行う合理的な方法はありますか?

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

4

3 に答える 3

11

ここには、いくつかの異なるソフトウェアが関係しています。

まずはカード本体。デジタル署名を実行するには、CAC が「検証済み」状態である必要があります。これは、カードが挿入された後に PIN が入力されたことを意味します。さらに、カードの各キーには、キーを使用するたびに PIN を入力する必要があるかどうかを示すフラグがあります。確認していませんが、これは CAC の「メール」キー ペアに設定されていると思います。したがって、この「常に検証」フラグが設定されているキーを見つけて、それらのキーのみを受け入れるようにサービスのパス バリデータを構成する必要があります。拡張キーの使用法で特定の OID を要求したり、一部の DoD 中間証明書をパスの構築から除外したりできる場合があります (おそらく失効済みとしてフラグを立てます)。

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

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

于 2009-11-26T00:08:27.223 に答える
7

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

PINプロンプトにとって重要なことは2つあります。

  • ブラウザのSSLセッションおよびSSLセッションキャッシュ
  • 関連する秘密鍵のオンカード認証状態
  • ミドルウェアの実装方法。

結局、セキュリティの観点から、PINを「要求」するタイミングを知っているのはカードです。一部のカードとキーは、キーを使用するすべての操作でPINを必要とします。一部のカードは、PINを一度取得してキーを離れても問題ありません。リーダーから削除されるか、アプリケーションによってリセットされるまで、認証された状態になります。

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

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

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

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

于 2009-11-26T08:51:37.347 に答える
0

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

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();
    }
}

Javascript の setTimeout メソッドを使用して上記のログアウト関数を呼び出し、それらを logout.aspx ページにリダイレクトして、クライアントに新しい PIN の入力を強制することができます。

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

于 2016-05-11T19:13:59.280 に答える