所以这就是我要做的事情:
我连接到我的SSL服务器
它向我发送了两张证书,其中一张是自签名的
在这个阶段,没有问题,我已经:
X509Certificate[] myTwoCerts;
// with 2 certificates in there, and I'm sure it's there because, I print them in my console.
到现在为止,我尝试过这样的事情:
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
任何人都可以帮助我吗??
答案 0 :(得分:1)
Java中的PKCS12
密钥库在没有私钥的情况下不能用于存储证书或证书链。
“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);