Как пара закрытый ключ и сертификат совпадают в оболочке IAIK PKCS11?

Я хочу работать с токеном pkcs11 в java. Таким образом, я использовал «IAIK» в качестве java-обертки pkcs11. Я могу искать такие объекты, как ключи и сертификаты, но не могу узнать, какой ключ какому сертификату принадлежит. Я использовал «CryptoKi Manager» для поиска объектов в токене, и он показывает связь между сертификатом и ключом, как показано на рисунке ниже. Затем я изучил стандарт PKCS11, в нем говорилось, что есть поле с именем «certId», которое объявляет это соединение, но я не смог найти его в «IAIK». Поддерживает ли «IAIK» эту функцию в своем объекте «Сертификат»? Как?

введите здесь описание изображения


person Mohsen Gorgani    schedule 30.06.2019    source источник


Ответы (1)


Это соединение осуществляется через атрибут CKA_ID со ссылкой на PKCS#11 версии 2.20:

Поле CKA_ID предназначено для различения нескольких ключей. В случае открытых и закрытых ключей это поле помогает обрабатывать несколько ключей, принадлежащих одному и тому же субъекту; идентификатор ключа для открытого ключа и соответствующего ему закрытого ключа должен совпадать. Идентификатор ключа также должен быть таким же, как у соответствующего сертификата, если он существует. Однако Cryptoki не обеспечивает соблюдение этих ассоциаций. (Дальнейшие комментарии см. в Разделе 10.6.)

Обратите внимание, что эта ассоциация не принудительная (YMMV), но вменяемые реализации ведут себя именно так.

Используйте Key.getId() и X509PublicKeyCertificate .getID() в оболочке PKCS#11.

С IAIK-провайдером (обратите внимание, что вам нужна лицензия) используйте IAIKPKCS11Key.getKeyID() для сопряжения объектов открытого и закрытого ключей. Я не знаю, как получить значение CKA_ID из сертификатов, полученных из TokenKeyStore.

Удачи!

person vlp    schedule 30.06.2019
comment
Здесь есть очень хорошие образцы: github.com/aigens/java-sample-programs/tree/master/JavaSamples/ - person Mohsen Gorgani; 01.07.2019