• PKCS#12の読込みかた。
/*
 * AccessToPKCS12.java
 * 
 * CREATE: 2003/11/26
 * UPDATE: 
 */
package pkcs12test;

import java.io.*;
import java.security.*;
import java.util.*;
import org.apache.log4j.Category;

/**
 * <p>ローカルファイルシステム上のPKCS#12形式のファイルにアクセスし、諸情報を引っ張り出すクラス。</p>
 * 
 * @author Takasu
 * @version 1.0
 */
public class AccessToPKCS12 {
    private static Category cat = Category.getInstance(AccessToPKCS12.class.getName());
    private static String pkcs12file;
    private static String pkcs12pass;

    /**
     * メインメソッド。引数は使わない。
     */
    public static void main(String[] args) {
        cat.info("処理開始");

        // まず初期化
        init();

        try {
            // キーストアのタイプをいつものJKSではなくPKCS12にする。
            KeyStore ks = KeyStore.getInstance("PKCS12");
            
            // キーファイルの読み込み
            ks.load(new FileInputStream(pkcs12file), null);

            // 試しにキーストアから秘密鍵を取得し、中身をダンプさせてみる。
            PrivateKey privateKey = (PrivateKey)ks.getKey("1", pkcs12pass.toCharArray());
            if(privateKey == null){
                cat.warn("鍵の取得に失敗しました。Alias か KeyPassword が間違っている可能性があります。");
            }else{
                cat.info("秘密鍵のダンプ:\n" + privateKey.toString());
                cat.info("秘密鍵のフォーマット:" + privateKey.getFormat().toString());
                cat.info("秘密鍵アルゴリズム:" + privateKey.getAlgorithm().toString());
                //cat.info("秘密鍵エンコード :" + privateKey.getEncoded());
            }
        } catch (Exception e) {
            // 対応する例外が一杯あるけど省略。
            e.printStackTrace();
        }
        cat.info("処理終了");
    }

    /**
     * 初期処理を実行するメソッド。<br />
     * PKCS#12ファイルパス、およびキーパスワードを設定する。
     */
    private static void init() {
        try {
            // プロパティファイルのパスを渡して読み込む
            Properties prop = new Properties();
            prop.load(new FileInputStream("pkcs12test/user.ini"));

            // Static変数にプロパティを格納。
            pkcs12file = prop.getProperty("pkcs12file");
            pkcs12pass = prop.getProperty("pkcs12pass");
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}