質問

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

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

役に立ちましたか?

解決

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

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

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

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

他のヒント

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

PINプロンプトに関して重要なことが2つあります:

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

最後に、セキュリティの観点から、「尋ねる」タイミングを知っているのはカードです。 PIN-一部のカードおよびキーは、キーを使用するすべての操作にPINを必要とします。一部のカードは、一度PINを取得し、リーダーから削除されるか、アプリケーションによってリセットされるまでキーを認証状態のままにしておくことができます。

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

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

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

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

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を使用し、コードはブラウザーに依存しており、すべてのブラウザーで機能するわけではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top