我试图在Java 11中使用SUNPKCS11和NSS启用FIPS模式。我遇到了此异常 java.security.NoSuchAlgorithmException:PKCS11 KeyStore不可用。
当我尝试在 Java 8 中启用FIPS时,效果很好,但是在 Java 11 中执行相同操作会抛出异常。
SUNPKCS11的初始化从Java 8更改为Java 11。
在Java 8中:
Provider provider = Security.getProvider("SunPKCS11");
provider.configure(nssConfigFile);
Java 11:
Provider provider = new sun.security.pkcs11.SunPKCS11(nssConfigFile);
Security.addProvider(nssProvider);
使用配置文件初始化SUNPKCS11之后,我正尝试从密钥库中获取提供程序,如下所示。
还有一件事是,当我初始化SUNPKCS11时,将 Provider.id.info 设置为
未配置且无法使用的PKCS11提供程序,这是否与某件事有关?
KeyStore.getInstance("SUNPKCS11");
然后在这里我的密钥库中没有PKCS11。
我的配置文件内容如下:
name=nss-client
nssLibraryDirectory=X:\XXX\NSS\lib\
nssSecmodDirectory=X:\XXX\NSS\db\
nssModule=fips
我是否需要更改配置文件内容,还是Java 11中的错误?
请帮我提出宝贵的建议。
答案 0 :(得分:1)
好的-关于原始问题的评论之一包含了解决方案。所以,我在这里重新记录它。
看来provider.configure(..)
方法返回的是 new 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");