gpt4 book ai didi

Java KeyStore-PKCS12的处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:22 39 4
gpt4 key购买 nike

我目前从事的项目涉及 keystore 和证书的管理。因此,我使用 Java Security API。使用证书的工作很好,但是 PKCS12-KeyStores 的处理有点困惑:

我从 Windows certmgr 中导出了一个 PKCS12-KeyStore,其中涉及一些公共(public)证书(出于测试原因的 CA 证书)。 Security API 打开相应的文件没有错误,并报告没有条目(为了排除个人编程错误,我将使用使用相同 Security API 的 Java keytool 来显示错误)。

#$ keytool -list -keystore keystore.pfx -storetype pkcs12 

Enter Keystore-Password:

Keystore-Type: PKCS12
Keystore-Provider: SunJSSE

Keystore contains 0 Entries

然而,KeyStore Explorer(不同的程序)会显示所有条目。

如果将私钥添加到 KeyStore,它们将被 KeyTool 识别。

是我有普遍的误解还是这里是什么情况?

提前致谢,托马斯

最佳答案

这是标准 Java/Sun 安全提供程序中 KeyStore API 实现的限制。

在处理 PKCS12 keystore 时,标准实现无法处理受信任的证书条目。尝试写入一个这样的条目将导致不支持的操作异常,而读取一个将不会产生任何结果。

但是,它可以处理链接到 key 条目的证书条目。

(在此默认实现中,JKS 格式更适合用于处理同一容器中的可信条目和 key 条目的单个 KeyStore)。 KeyStore(BouncyCaSTLe)的其他实现可以为PKCS12提供更好的支持。

请参阅已接受的答案:Writing a client-server application that uses ssl / tls using java without beeing able to use keytool

例如:这将失败,抛出 java.security.KeyStoreException: TrustedCertEntry not supported

KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(null, null);
ks.setCertificateEntry("test", certificate);

但这行得通:

Security.addProvider(new BouncyCastleProvider());
KeyStore ks = KeyStore.getInstance("PKCS12", BouncyCastleProvider.PROVIDER_NAME);
ks.load(null, null);
ks.setCertificateEntry("test", ca);

关于Java KeyStore-PKCS12的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049529/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com