Хотя privateKey токена USB недоступен, тогда почему мы используем keystore.getKey() в Java для цифровой подписи PDF
По всем показаниям я обнаружил, что при использовании USB-токена (HSM) мы не можем получить закрытый ключ из USB-токена, тогда почему мы вызываем KeyStore.getKey(alias,password)
в коде Java.
Я сделал что-то вроде этого, где ks мой объект KeyStore.
PrivateKey privateKey=(PrivateKey)ks.getKey(alias,pass.toCharArray());
а затем распечатать privateKey я получаю следующие значения.
{algorithm: "RSA", encoded: null, format: null}
Кто-нибудь может объяснить необходимость этого шага, и что он будет делать, пока мы будем подписывать документ цифровой подписью с помощью USB-токена?
1 ответ
PrivateKey - это интерфейс, реализация которого зависит от поставщика криптографии.
В вашем случае, для токена USB провайдер (возможно, Sun pkcs # 11) инкапсулирует команды pkcs11 в токен, когда вы выполняете криптографическую операцию. Закрытый ключ на самом деле не содержится в вашем Java-сервисе, а команды выполняются на токене.
Закрытый ключ не извлекается, поэтому encoded
значение должно быть нулевым. Например, если вы используете хранилище ключей Pkcs12 (локальный файл.p12), вы увидите, что encoded
атрибут содержит закрытый ключ, закодированный в формате DER