29

基本的に、Java を使用して政府の CAC カードとやり取りする方法を学び始める場所を探しています。

私の最終的な目標は、CAC カード認証 (PIN 番号による) を使用して、Tomcat/J2EE サーバーを使用してホストされている Web サイトへのアクセスを承認する方法を見つけることです。

しかし、どこかで始める必要があります。したがって、キーボードのカードリーダーに挿入されたCACカードからCACカード情報を読み取るための小さなJavaプログラムを作成することから始めます(数字キーパッドの上にCACリーダーを備えたDELLキーボード)。

Google で検索すると、 OpenSSOプロジェクトに置き換えられたcacard Java プロジェクト ( https://cacard.dev.java.net/ ) が見つかりました。しかし、それを使用してカードに接続したり、カードから読み取ったりする方法のサンプルコードが見つからないようです.

Javaを使用してCACカードと対話する方法を学び始めることができるように、サンプルコードがどこにあるか知っている人はいますか?

ありがとう

編集:

さらに調査した結果、ファイルclientAuth="true"のコネクタ要素に設定するだけでよいのではないかと考えていました。server.xml

http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

clientAuth: Tomcat がすべての SSL クライアントに対して、このソケットを使用するためにクライアント証明書を提示することを要求する場合は、この値を true に設定します。

4

3 に答える 3

9

card.configという名前のファイルを作成し、次の行を含める必要があります。

name = myConfig
library = /path/to/library/that/implements/cac/card/reader 

そして、これを試してください:

import java.io.*;
import java.util.*;

import java.security.cert.CertificateException;
import java.security.KeyStoreException;
import java.security.cert.X509Certificate;

import java.security.KeyStore;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.Security;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;

public class Test  
{
   public static void  main(String arg[]) throws Exception
   {
       try
       {   
         //Create our certificates from our CAC Card
         String configName = "card.config";
         Provider p = new sun.security.pkcs11.SunPKCS11(configName);
         Security.addProvider(p);

         //Get the pin from user entered data
         Console c = System.console();
         char[] pin = c.readPassword("Enter your PIN: ");
         KeyStore cac = null;

         cac = KeyStore.getInstance("PKCS11");
         cac.load(null, pin);

         showInfoAboutCAC(cac);

      }
      catch(Exception ex)
      {
         //System.out.println("*" + ex.getMessage());
         ex.printStackTrace();
         System.exit(0);
      }
   }

   public static void showInfoAboutCAC(KeyStore ks) throws KeyStoreException, CertificateException
   {
      Enumeration<String> aliases = ks.aliases();

      while (aliases.hasMoreElements()) 
      {
         String alias = aliases.nextElement();
         X509Certificate[] cchain = (X509Certificate[]) ks.getCertificateChain(alias);

         System.out.println("Certificate Chain for : " + alias);
         for (int i = 0; i < cchain.length; i ++)
         {
            System.out.println(i + " SubjectDN: " + cchain[i].getSubjectDN());
            System.out.println(i + " IssuerDN:  " + cchain[i].getIssuerDN());
         }
      }
   }
}

この時点で、https Web サーバーと通信するための ssl ソケットを作成するために使用できるキーストアができました。

于 2009-10-27T18:48:53.287 に答える
0

OpenSSOJOSSOなどのSSOタイプのアプリケーションを使用した証明書認証の使用を検討してください。エージェントはより簡単に埋め込むことができ、詳細のほとんどはすでに実装されています。自分で行う必要がある場合は、デジタル証明書のセットアップなど、必要な手順に関連する多くのドキュメントもあります。

于 2009-07-08T22:08:19.327 に答える