2009-04-15 7 views
8

HTTPSサーバ(DoDウェブサイト)に接続するためのJavaプログラムを作成する必要があります。ウェブサイトでは、CAC(DoD共通アクセスカード)認証が必要です。ブラウザでこのサイトにアクセスする場合は、まずCACを挿入してPINを入力します。共通アクセスカードを使用してHTTPSサーバに接続する方法

Java(ブラウザのような振る舞いのようなもの)で認証プロセスをプログラムで実行する必要があります。 CACから情報を取得するにはどうすればよいですか?私は周りにグーグルで行って、Java PKCS#11リファレンスガイドを読んでいます。 Sun PKCS#11プロバイダのように見えますが、ネイティブのPKCS#11トークン実装が必要です。

私は正しいですか?誰もこれの前にこれをしましたか?どんな提案やコメントも大歓迎です。

+0

http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-javaを見てみると、いくつかの参考になるかもしれません。 –

答えて

3

まず、PKCS#11のサポートをインストールする必要があります。これは、PKCS#11インターフェイスを提供する.dll(または.so)を提供する、おそらくカードリーダーに付属するネイティブコードです。 Mozilla製品やSunのPKCS#11プロバイダなど、システム上の他のソフトウェアはこのライブラリを使用します。 (マイクロソフト製品はしばしば別のインターフェイス「CAPI」を使用します)

PKCS #11 Reference Guide,の指示に従って、SunPKCS11プロバイダを設定します。私がセットアップで提供しなければならなかった唯一のプロパティは、インストールされたネイティブ "ライブラリ"の場所とこのプロバイダの "名前"サフィックスです。 "name"プロパティは "SunPKCS11-"に追加されます。したがって、名前に "CAC"を指定すると、を後でSecurity.getProvider("SunPKCS11-CAC")で検索できます。

その後、あなたはCACのキーマテリアルへのJSSEのアクセス権を与える("PKCS11"の値を持つ)とjavax.net.ssl.keyStoreType"NONE"の値を持つ)標準JSSEシステム・プロパティjavax.net.ssl.keyStoreを使用することができます。パスワードプロパティを設定する必要はありません。ネイティブコードでは、必要なときにユーザーにPINを入力する必要があるためです。

注意点は、ユーザーの「エンドエンティティ」証明書のみがCACから入手できることです。信頼できるチェーンを構築するために、ほとんどのサーバーはクライアントが中間証明書を送信することを期待しています。これを回避することは可能ですが、複雑です。具体的には、javax.net.ssl.X509KeyManagerを実装する必要があります。あなたが作業しているサーバが完全なチェーンを必要とする場合は、フォローアップの質問を投稿してください。

関連する問題