我试图在Java 11中使用带有NSS的SUNPKCS11启用FIPS模式。我得到了异常SUNPKCS11 PKCS11 KeyStore不可用。
当我试图在Java 8中启用FIPS时,它可以正常工作,但是在Java 11中执行同样的操作会引发异常。
SUNPKCS11的初始化从Java8改为Java11。
在Java 8中:
Provider provider = Security.getProvider("SunPKCS11");
provider.configure(nssConfigFile);Java 11:
Provider provider = new sun.security.pkcs11.SunPKCS11(nssConfigFile);
Security.addProvider(nssProvider);在使用配置文件初始化SUNPKCS11之后,我正尝试从keystore中获取提供程序,如下所示。
还有一件事是,当我初始化Provider.id.info时,它的SUNPKCS11被设置为未配置和不可用的PKCS11提供者,这与此有关吗?
KeyStore.getInstance("SUNPKCS11");然后在这里我没有密钥存储中的PKCS11。
我的配置文件内容如下所示:
name=nss-client
nssLibraryDirectory=X:\XXX\NSS\lib\
nssSecmodDirectory=X:\XXX\NSS\db\
nssModule=fips我是否需要更改配置文件内容中的某些内容,还是Java 11中的bug?
请帮助我提出有价值的建议。
发布于 2020-09-11 14:00:38
好吧所以,我要把它重新记录下来。
看来,provider.configure(..)方法返回一个新的Provider,而不是修改原始的provider。考虑到这一点,您可以这样做:
Provider oldProvider = Security.getProvider("SunPKCS11");
Provider newProvider = oldProvider.configure("yubihsm.conf");
Security.addProvider(newProvider);
// Hooray! This works now!
KeyStore ks = KeyStore.getInstance("pkcs11");https://stackoverflow.com/questions/53397862
复制相似问题