繁体   English   中英

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

[英]java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available, Trying to Enable FIPS mode using SUNPKCS11 in java 11

我正在尝试在 Java 11 中使用带有 NSS 的 SUNPKCS11 启用 FIPS 模式。我遇到了这个异常java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available。

当我尝试在Java 8 中启用 FIPS 时,它工作正常,但在Java 11 中执行相同操作会引发异常。

SUNPKCS11 的初始化从 Java 8 更改为 Java 11。

在 Java 8 中:

  Provider provider = Security.getProvider("SunPKCS11");      
  provider.configure(nssConfigFile);

爪哇11:

  Provider provider = new sun.security.pkcs11.SunPKCS11(nssConfigFile);
  Security.addProvider(nssProvider);

使用配置文件初始化 SUNPKCS11 后,我尝试从密钥库中获取提供程序,如下所示。
还有一件事是当我初始化 SUNPKCS11 时,它的Provider.id.info被设置为Unconfigured and unusable PKCS11 provider ,这有什么关系吗?

KeyStore.getInstance("SUNPKCS11");

然后在这里我没有密钥库中的 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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM