java.security.NoSuchAlgorithmException : PKCS11 KeyStore not available, 尝试在 java 11 中使用 SUNPKCS11 启用 FIPS 模式

标签 java fips java-11 nss sunpkcs11

我正在尝试在 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/

相关文章:

node.js - 无法在 Bluemix 上以 FIPS 模式运行 node.js 应用程序

java - 没有 JMC-Java Mission Controller-FlightRecorder 的 OpenJDK JDK11

java - Wsimport 在 Java 11 中失败

java - 使用 root Android 应用程序运行二进制文件

c# - 如何在 asp.net 中使用符合 fips 140-2 标准的随机数生成器生成 session ID

java - 从 Csv 文件读取数据

java - 如何让 Solr 8.11 在启用 FIPS 的环境中运行

java - 同步 : Caused by: org. codehaus.groovy.control.MultipleCompilationErrorsException : startup failed error in syncing. ... androidstudio 3.6.1

java - 在没有工作区的情况下使用 Java SDK 以编程方式将文件提交到 TFS

java - 你能在Android Studio中为 "this"设置一个变量吗?