Получить закрытый ключ из токена с помощью апплета

У меня есть апплет, который читает сертификат и, как следствие, открытый и закрытый ключи из USB-токена. Я могу получить доступ к PrivateKey всякий раз, когда токен подключен, но у меня есть криптографическая среда, в которой мне нужно опубликовать сертификат и ключи в сервлете, и этот сервлет подпишет выбранные файлы в моем приложении. Он работал нормально, пока я не получил этот токен с неэкспортируемым PrivateKey.

PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, PIN.toCharArray());

Затем я использую декодер, чтобы преобразовать массив байтов в BASE64 и опубликовать его.

sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
String base64encoded = encoder.encode(privateKey.getEncoded());

Однако, используя этот конкретный токен, метод getEncoded(), используемый для privateKey.getEncoded(), всегда возвращает значение null. Поэтому я не нашел способа получить массив байтов из объекта PrivateKey.

Есть ли способ сделать это?


person Daniel Vieira    schedule 21.10.2014    source источник
comment
Использование апплета для доступа к токену из браузера — это старые способы, и современные браузеры больше не поддерживают апплеты. Вы можете обратиться к нескольким ссылкам SO на странице Signer.Digital Browser Extensions, чтобы узнать, как это сделать лучше.   -  person Bharat Vasant    schedule 25.06.2019


Ответы (1)


Вы не можете получить закрытый ключ из токена PKCS11, PKCS11 используются для хранения материала ключа внутри защищенного устройства и не могут быть извлечены, когда вы хотите подписать с помощью таких устройств (HSM, смарт-карты и т. д.). on) подпись выполняется внутри него.

Если вы хотите выполнить подпись с помощью клиентского PKCS11 usb-токена и апплета, вы должны выполнить подпись в апплете, выполняемом на клиентской машине, вместо того, чтобы делать подпись на стороне сервера, передавая ключ, потому что этот вариант невозможен.

Надеюсь это поможет,

person albciff    schedule 22.10.2014