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");