0

所以这就是我想要做的:

  • 我连接到我的 SSL 服务器

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

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

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

到目前为止,我已经尝试过这样的事情:

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

有人可以帮我吗?

4

2 回答 2

1

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

请参阅JCA 参考指南中的此注释:

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

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

如果你想在 Java 的 PKCS#12 存储中存储一个私钥 + 证书(链),需要有一个私钥并且你需要使用该setKeyEntry方法。

于 2014-03-21T14:32:27.530 回答
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);
于 2019-05-10T20:25:29.503 回答