0

私たちは新しい安全なプロジェクトに取り組んでいます。サーバー側とクライアント側の両方の認証を有効にしたいと考えています。クライアント認証を可能にするために、「カード リーダー」に挿入し、指紋を使用してロックを解除できるカードを作成したいと考えています。

現在、A 社のカード リーダーが数台あり、クライアント側 (Java - ブラウザではなく、独自の小さなソフトウェア) でそのカードの証明書を使用するために、Java プログラムは、 dll に接続できるようにします。

カードリーダーをB社に変更する場合に備えて、このカードリーダーへの接続を汎用にする方法を探しています。

私の質問は次のとおりです。

  1. 証明書のカード リーダーにアクセスするより良い方法はありますか? たとえば、純粋な Java コード (または純粋な JDK コード) を使用し、何らかの方法で証明書を取得し、必要なその他すべての操作を行う場合などです。

  2. これを行う純粋なJavaの方法がない場合、特定の.dllに依存しないようにするのに役立つ一般的な方法はありますか?

  3. これはどのくらい安全だと思いますか?おそらく、カードリーダーなしでクライアント認証を行う同等の安全な方法はありますか?

4

2 に答える 2

2

OracleJREにはSunPKCS#11プロバイダーが付属しており、PKCS#11APIを実装するDLLをプラグインできます。

これは、Javaに関する限り、間違いなく「標準」の方法です。スマートカードをKeyStoreインスタンスとしてロードできます。スマートカードからキーを抽出できない場合PrivateKeyでも、アプリケーションの署名/復号化で使用するオブジェクトが作成されますが、プライベート指数を抽出することはできません(ここでRSAを想定):操作を次のように委任します設計どおりのカード。

(過去にLinuxマシンのOpenSC / OpenCTで正常に試しました。PKCS#11はWindowsの方がまれだと思いますが、一部のスマートカードプロバイダーはまだインターフェイスを提供している可能性があります。)

これがどの程度安全かは、使用しているPKCS#11実装によって異なります。PKCS#11に適合するように独自のDLLを微調整するには、「安全」と呼ぶ前に、確かにある程度の努力とレビューが必要になります。

于 2012-05-16T01:42:58.163 に答える
0

1つのオプションは、カードリーダーデバイスドライバーとJavaアプリケーションの間にあるミドルウェアです。このように、アプリケーションはミドルウェアライブラリとのみ対話し、DLLや使用しているハードウェアの種類、さらにはSunPKCS11プロバイダーに直接アクセスする必要はありません。新しいカードリーダーがインストールされている場合、ミドルウェアはドライブと相互作用します。証明書にアクセスできますが、バイオメトリクスデータ(指紋)が(サーバー上ではなく)スマートカードに保存されている場合は、ミドルウェアがこれにアクセスするのに役立ちます。このようなミドルウェアを製造している会社の1つがActiveIdentityです。

于 2012-05-17T17:18:57.040 に答える