3

Java クラス CertAndKeyGen および X500Name を使用して作成された証明書があり、バイト配列の証明書を生成できます。ここで、証明書で使用した秘密鍵が必要で、それを読み取り可能な形式に変換します。以下は、証明書の作成に使用したコードです。

    CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null); 
    X500Name x500Name = new X500Name(commonName, organizationalUnit, organization, city, state, country);
    keypair.generate(keysize);
    PrivateKey privKey = keypair.getPrivateKey();
    PKCS10 certReq = keypair.getCertRequest(x500Name);
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = keypair.getSelfCertificate(x500Name, new Date(), (long) validity * 24 * 60 * 60);
    keyStore.setKeyEntry(alias, privKey, keyStorePassword.toCharArray(), chain);                    
    ByteArrayOutputStream bs = new ByteArrayOutputStream();
    PrintStream ps = new PrintStream(bs);
    certReq.print(ps);
    byte[] certReqPrintable = bs.toByteArray(); 

手がかりがありません。秘密鍵を取得して読み取り可能な形式に変換するために正しい方向に進むのを手伝ってください。前もって感謝します。

4

2 に答える 2

1

BouncyCastle には、秘密鍵を PEM 形式でファイルに書き込むために使用できる便利なPEMWriterクラスがあります (これは、OpenSSH や curl などのツールが期待するものです)。

PEMWriter privatepemWriter = new PEMWriter(new FileWriter(filename)));
privatepemWriter.writeObject(privKey);
privatepemWriter.close();

それ以外の場合は、多くのツールでも使用される DER 形式である秘密鍵からバイト配列を保存できます。

最後に、これを使用して、他の Java プログラムで使用される JKS キーストアに書き込むことができます。

KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null);
keyStore.setKeyEntry("some alias", privKey, somePassword.toCharArray(), chain[0]));
FileOutputStream fos = new FileOutputStream(filename);
keyStore.store(fos, somePassword.toCharArray());
fos.close();
于 2012-06-14T10:01:48.853 に答える