首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Java 8从Microsoft密钥库加载下一代证书?

如何使用Java 8从Microsoft密钥库加载下一代证书?
EN

Stack Overflow用户
提问于 2015-08-27 10:44:56
回答 2查看 1.4K关注 0票数 17

我尝试直接从Microsoft存储加载证书,以避免从MS存储导出证书,然后将它们导入JKS存储。

我设法从一个典型的AD CS web服务器模板使用传统加密直接从MS商店使用SunMSCAPI创建证书。

但是,SunMSCAPI不支持我正在使用的现代CNG密码,特别是RSA2048非对称加密、SHA-384哈希和ECDSA-384数字签名。

是否可以使用Java从MS商店加载下一代证书?我上jdk1.8.0_45了。是否有现成的JCE提供程序可以替代SunMSCAPI来处理CNG?我怀疑它将不得不使用JNI或JNA来访问本机Windows CNG API。

我尝试过Pheox JCAPI,但没有成功。它支持RSA和DSA,但不支持ECDSA。我没有尝试过Bouncy Castle,但我的理解是它不提供这样的功能。

有没有其他现成的JCE提供程序替代SunMSCAPI,我可以尝试一下?

更新:JCAPI v2 supports only RSA, ECDH support planned for v3 next year.

更新:有些人建议安装Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for Java 8也许可以解决这个问题,但是不,这没有帮助,因为问题是SunMSCAPI只支持RSA密码,从source code可以看出这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-26 23:32:29

正如已经提到的,这在SunMSCAPI中是不可能的。实际上,有一个开放的增强请求,其中一个人可以投票支持修复该问题。

此处的问题:https://bugs.openjdk.java.net/browse/JDK-8026953

票数 2
EN

Stack Overflow用户

发布于 2018-05-05 14:52:22

下一代api不是在与windows crypto api交互的sunmscapi c++代码文件security.cpp -中实现的。在sunmscapi的java代码中也没有实现EC。

您可以在此处查看来自openJDK的源代码:http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/556b17038b5c/src/windows/native/sun/security/mscapi/security.cpp

当您从java代码中调用keystore.load(null,null)时,它最终会以c++代码函数Java_sun_security_mscapi_KeyStore_loadKeysOrCertificateChains结束。第383行CryptAcquireCertificatePrivateKey返回false,因为它没有使用CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG标志。即使你修复了这条线,它最终也会崩溃。因为它使用旧的加密api函数。

让它工作意味着你自己重写所有的sunmscapi,使用新的下一代加密api。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32239859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档