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を再度入力する必要があることを確認できます。ただし、これはクライアント側の構成であり、サーバーが開始する機能ではありません。