首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.security.NoSuchAlgorithmException: PKCS11 KeyStore不可用,试图在java 11中使用SUNPKCS11启用FIPS模式

java.security.NoSuchAlgorithmException: PKCS11 KeyStore不可用,试图在java 11中使用SUNPKCS11启用FIPS模式
EN

Stack Overflow用户
提问于 2018-11-20 16:55:50
回答 1查看 2.2K关注 0票数 8

我试图在Java 11中使用带有NSS的SUNPKCS11启用FIPS模式。我得到了异常SUNPKCS11 PKCS11 KeyStore不可用。

当我试图在Java 8中启用FIPS时,它可以正常工作,但是在Java 11中执行同样的操作会引发异常。

SUNPKCS11的初始化从Java8改为Java11。

在Java 8中:

代码语言:javascript
复制
  Provider provider = Security.getProvider("SunPKCS11");      
  provider.configure(nssConfigFile);

Java 11:

代码语言:javascript
复制
  Provider provider = new sun.security.pkcs11.SunPKCS11(nssConfigFile);
  Security.addProvider(nssProvider);

在使用配置文件初始化SUNPKCS11之后,我正尝试从keystore中获取提供程序,如下所示。

还有一件事是,当我初始化Provider.id.info时,它的SUNPKCS11被设置为未配置和不可用的PKCS11提供者,这与此有关吗?

代码语言:javascript
复制
KeyStore.getInstance("SUNPKCS11");

然后在这里我没有密钥存储中的PKCS11。

我的配置文件内容如下所示:

代码语言:javascript
复制
  name=nss-client   
  nssLibraryDirectory=X:\XXX\NSS\lib\   
  nssSecmodDirectory=X:\XXX\NSS\db\   
  nssModule=fips

我是否需要更改配置文件内容中的某些内容,还是Java 11中的bug?

请帮助我提出有价值的建议。

EN

回答 1

Stack Overflow用户

发布于 2020-09-11 14:00:38

好吧所以,我要把它重新记录下来。

看来,provider.configure(..)方法返回一个新的Provider,而不是修改原始的provider。考虑到这一点,您可以这样做:

代码语言:javascript
复制
Provider oldProvider = Security.getProvider("SunPKCS11");
Provider newProvider = oldProvider.configure("yubihsm.conf");
Security.addProvider(newProvider);

// Hooray!  This works now!
KeyStore ks = KeyStore.getInstance("pkcs11");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53397862

复制
相关文章

相似问题

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