我正在尝试在 Java 11 中使用带有 NSS 的 SUNPKCS11 启用 FIPS 模式。我收到此异常 java.security.NoSuchAlgorithmException: PKCS11 KeyStore 不可用。
当我尝试在 中启用 FIPS 时Java 8 它工作正常,但在 中做同样的事情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 后,我尝试从 keystore 中获取提供程序,如下所示。
还有一件事是当我初始化 SUNPKCS11 时,它是 Provider.id.info 被设定为
未配置且无法使用的 PKCS11 提供程序 ,这和这有关系吗?
KeyStore.getInstance("SUNPKCS11");
然后在这里我没有 keystore 中的 PKCS11。
我的配置文件内容如下:
name=nss-client
nssLibraryDirectory=X:\XXX\NSS\lib\
nssSecmodDirectory=X:\XXX\NSS\db\
nssModule=fips
我需要更改配置文件内容中的某些内容还是 Java 11 中的错误?
请帮助我提出宝贵的建议。
最佳答案
好的 - 对原始问题的评论之一包含解决方案。所以,我在这里重新记录它。
看来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");
关于java.security.NoSuchAlgorithmException : PKCS11 KeyStore not available, 尝试在 java 11 中使用 SUNPKCS11 启用 FIPS 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53397862/