CKR_USER_NOT_LOGGED_IN при генерации пары ключей с использованием провайдера sunPKCS11

При попытке создать пару ключей rsa с поставщиком Sun PKCS11, метод generateKeyPair() бросает ProviderException: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_USER_NOT_LOGGED_IN

Мой код выглядит так:

Provider prov = ... // initialize provider

KeyStore ks = KeyStore.getInstance("PKCS11", prov);
ks.load(null, "pass".toCharArray());

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA", prov);
keyGen.initialize(2048);
KeyPair kp = keyGen.generateKeyPair();    // exception thrown here

Я пытался с помощью AuthProvider сразу после инициализации провайдера вот так:

AuthProvider aprov = (AuthProvider) prov;
aprov.login(null, callbacks -> {
    log.error("@@@ Inside callbacks {}", callbacks.length);
});
aprov.setCallbackHandler(callbacks -> {
    log.error("@@@ Inside setCallBackHandler {}", callbacks.length);
});

Но я не вижу никакого вывода журнала, так что это означает, что лямбды не выполняются.

Конечная цель - создать пару ключей RSA и сохранить ее в хранилище ключей (HSM) через PKCS11.

Я пробовал openjdk 8 и oracle jdk 8. Также при выводе псевдонимов из хранилища ключей я получаю пустой список, но я знаю, что есть одна запись. Добавление -Djava.security.debug=sunpkcs11 ничего не изменилось.

1 ответ

Решение

Проблема в моем случае была неправильный номер слота в конфигурации провайдера. Выбранный слот был помечен как "ускоритель", который не поддерживает создание "частных объектов" - из документации HSM.

После переключения в другой слот работает генерация ключей и их хранение в хранилище ключей.

Другие вопросы по тегам