Есть ли способ программно преобразовать Keystore экземпляра PKCS11 в JKS?
Я использую смарт-карту, и экземпляр хранилища ключей находится в формате PKCS11. Я хотел создать файл.jks с сертификатом со смарт-карты. Есть ли способ достичь этого программно? Благодарю.
1 ответ
Вы можете (ОДНАКО, ЭТО НЕДОПУСТИМО), при условии, что производитель аппаратного токена поддерживает его и если вы создали объекты PKCS # 11 как извлекаемые.
ВНИМАНИЕ: То, что вы пытаетесь сделать, НЕ безопасно. Вы отбираете цель того, для чего предназначены аппаратные токены. Как только секретный объект создается в аппаратном токене, он не видит свет дня.
Для извлечения объекта PKCS11 необходимо установить CKA_EXTRACTABLE
в true
, CKA_NEVER_EXTRACTABLE
в false
, CKA_SENSITIVE
в false
а также CKA_ALWAYS_SENSITIVE
в false
,
Большинство производителей аппаратных токенов не поддерживают это. Предполагая, что вы нашли поставщика, который поддерживает это, и создали объекты PKCS11 с вышеуказанными атрибутами, вы можете сделать это, как показано ниже.
Вы можете перебрать записи экземпляра PKS11 KeyStore, вызвав aliases()
и найти каждую запись в нем. Это может быть либо KeyPair (PublicKey и PrivateKey), либо сертификат или объект данных (если это токен PIV SmartCard). Вы можете иметь другой экземпляр JKS KeyStore, и теперь вы можете сделать jksKS.setEntry(...)
или же jksKS.setCertificateEntry(...)
,
Если токен не поддерживает создание нечувствительных данных, вы не сможете сначала создать объект PKCS11 с указанными выше атрибутами. Если токен не поддерживает извлечение, токен PKCS11 выдаст исключение, сообщающее, что конфиденциальные данные не могут быть извлечены.