java.security.NoSuchAlgorithmException: PKCS11 KeyStore недоступен, Попытка включить режим FIPS с использованием SUNPKCS11 в Java 11

Я пытаюсь включить режим FIPS, используя SUNPKCS11 с NSS в Java 11. Я получил это исключение 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 с файлом конфигурации я пытаюсь получить провайдера из хранилища ключей, как показано ниже.
Еще одна вещь, когда я инициализировал 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 ответов

Хорошо - один из комментариев к исходному вопросу содержал решение. Итак, я заново документирую это здесь.

Похоже, что 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");
Другие вопросы по тегам