Jim*_*lue 3 java security keystore pfx
我当前正在从事的项目涉及密钥库和证书的管理。因此,我使用Java安全性API。使用证书的工作可以很好地退出,但是PKCS12-KeyStores的处理有些混乱:
我从Windows certmgr中导出了PKCS12-KeyStore,其中涉及一些公共证书(出于测试原因,CA证书)。安全API会打开相应的文件而不会出错,并且报告没有条目(为防止个人编程错误,我将通过使用使用相同安全API的Java keytool来显示该错误)。
#$ keytool -list -keystore keystore.pfx -storetype pkcs12
Enter Keystore-Password:
Keystore-Type: PKCS12
Keystore-Provider: SunJSSE
Keystore contains 0 Entries
Run Code Online (Sandbox Code Playgroud)
但是,KeyStore Explorer(不同的程序)会显示所有条目。
如果将私钥添加到KeyStore,则它们会被KeyTool识别。
我是否有普遍的误解,或者是什么情况?
预先感谢,托马斯
这是标准Java / Sun安全提供程序中KeyStore API实现的限制。
在处理PKCS12密钥库时,标准实现无法处理受信任的证书条目。尝试写一个这样的条目将导致不支持的操作异常,而读一个不会产生任何结果。
但是,它可以处理链接到密钥条目的证书条目。
(在此默认实现中,JKS格式更适合用于在同一容器中处理受信任条目和密钥条目的单个KeyStore)。KeyStore(BouncyCastle)的其他实现可以为PKCS12提供更好的支持。
请参阅以下网址的已接受答案:使用Java编写使用ssl / tls的客户端服务器应用程序而又无法使用keytool
例如:这将失败,抛出 java.security.KeyStoreException: TrustedCertEntry not supported
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(null, null);
ks.setCertificateEntry("test", certificate);
Run Code Online (Sandbox Code Playgroud)
但这有效:
Security.addProvider(new BouncyCastleProvider());
KeyStore ks = KeyStore.getInstance("PKCS12", BouncyCastleProvider.PROVIDER_NAME);
ks.load(null, null);
ks.setCertificateEntry("test", ca);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2219 次 |
| 最近记录: |