在JAVA中创建PKCS12证书

时间:2012-12-13 13:33:21

标签: java certificate pkcs#12

所以这就是我要做的事情:

  • 我连接到我的SSL服务器

  • 它向我发送了两张证书,其中一张是自签名的

在这个阶段,没有问题,我已经:

X509Certificate[] myTwoCerts; 
// with 2 certificates in there, and I'm sure it's there because, I print them in my console.
  • 现在我想创建包含2个证书的.p12文件。

到现在为止,我尝试过这样的事情:

KeyStore pkcs12Store = KeyStore.getInstance("PKCS12");
pkcs12Store.load(null, null);
X509Certificate cert1 = myTwoCerts[0];
X509Certificate cert2 = myTwoCerts[1]
String alias1 = "FIRST";
String alias2 = "SECOND";
pkcs12Store.setCertificateEntry(alias1, cert2);
pkcs12Store.setCertificateEntry(alias2, cert2);

但是我得到以下例外:

Exception in thread "main" java.security.KeyStoreException: TrustedCertEntry not supported

任何人都可以帮助我吗??

2 个答案:

答案 0 :(得分:1)

Java中的PKCS12密钥库在没有私钥的情况下不能用于存储证书或证书链。

请参阅JCA reference guide

中的此说明
  

“pkcs12”是另一种选择。这是一个基于RSA PKCS12个人信息交换语法标准的跨平台密钥库。此标准主要用于存储或传输用户的私钥,证书和其他秘密。从JDK 6开始,用于在“pkcs12”中存储可信证书的标准尚未建立,因此“jks”或“jceks”应该用于可信证书。

(尽管提到了JDK 6,但这仍然在JDK 7文档中。)

如果要在Java中的PKCS#12商店中存储私钥+证书(链),则需要有一个私钥,您需要使用setKeyEntry方法。

答案 1 :(得分:0)

keytool -trustcacerts -keystore keystore.p12 -storetype pkcs12   -alias root -genkeypair


KeyStore pkcs12 = KeyStore.getInstance("PKCS12");
String filename = "/tmp/keystore.p12";
keyStore.load(
                    new FileInputStream(/*"myKeyStore.jks"*/filename),
                    password);