2
我使用EJBCA從CommonName生成證書。在java代碼中,我已經生成了私鑰和公鑰,然後是用於生成證書的csr。 現在我將證書保存爲PEM格式(.cer),但我也需要私鑰,所以我想用.pfx或p12擴展名保存。我能怎麼做? 這是我的實際代碼生成證書:將pfx證書保存到java代碼文件(ejbca)
KeyPair keys;
try {
keys = KeyTools.genKeys("1024", AlgorithmConstants.KEYALGORITHM_RSA);
//SAVE PRIVKEY
//PrivateKey privKey = keys.getPrivate();
//byte[] privateKeyBytes = privKey.getEncoded();
PKCS10CertificationRequest pkcs10 = new PKCS10CertificationRequest("SHA256WithRSA",
CertTools.stringToBcX509Name("CN=NOUSED"), keys.getPublic(), null, keys.getPrivate());
//Print Privatekey
//System.out.println(keys.getPrivate().toString());
CertificateResponse certenv = ws.certificateRequest(user1,
new String(Base64.encode(pkcs10.getEncoded())),
CertificateHelper.CERT_REQ_TYPE_PKCS10,
null,
CertificateHelper.RESPONSETYPE_CERTIFICATE);
//Certificate certenv = ejbcaraws.pkcs10Req("WSTESTUSER1","foo123",new
//String(Base64.encode(pkcs10.getEncoded())),null);
return certenv.getCertificate();
}catch (Exception e) {}
以及與此我保存證書:
File file = new File(path+"/"+ x509Cert.getSubjectDN().toString().replace("CN=", "") +".cer");
FileOutputStream os = new FileOutputStream(file);
//os.write("-----BEGIN CERTIFICATE-----\n".getBytes("US-ASCII"));
//os.write(Base64.encode(x509Cert.getEncoded(), true));
//os.write("-----END CERTIFICATE-----".getBytes("US-ASCII"));
//os.close();
PEMWriter pemWriter = new PEMWriter(new PrintWriter(os));
pemWriter.writeObject(x509Cert);
pemWriter.flush();
pemWriter.close();
我使用KeyPair在代碼中生成公鑰/私鑰對,並創建證書。現在,稍後在不同的請求中,我希望檢索在不同請求中生成的p12。在這種情況下,我該如何生成p12? – sbose 2016-02-05 11:14:25
@sbose這是一個不同的問題......如果我理解的很好,你想從之前創建的文件加載PKCS12不是嗎?那麼你只需要使用'keystore.load'方法來加載文件(例如使用'fileInputStream')。基本上類似於:'KeyStore kstore = KeyStore.getInstance(「PKCS12」); (new FileInputStream(「/ somePath/yourP12File.p12」),「yourPassword」.toCharArray()); ...' – albciff 2016-02-05 11:50:47
感謝您的回覆。不,從以前生成的證書創建一個pkcs12。證書存在於CertificateData表中的數據庫中。 – sbose 2016-02-05 11:56:09