Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

День добрый.
Не нашел примеров в sdk включения сертификата/цепочки сертификатов при подписании CMS / Cades-BES через  C_EX_PKCS7Sign. Во всех примерах примерно так
C_EX_PKCS7Sign(session, data, arraysize(data), certificates[0], &signature, &signatureSize, privateKeys[0], NULL_PTR, 0, USE_HARDWARE_HASH | PKCS7_DETACHED_SIGNATURE);
Т.е. насколько я понял без включения.
Как мне правильно сформировать и подставить параметры
phCertificates            [in]    указатель на массив сертификатов, цепочку сертификатов
ulCertificatesLen    [in]    количество сертификатов в параметре phCertificates
в C_EX_PKCS7Sign для включения сертификата/цепочки сертификатов

Спасибо.

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

__Vladimir__, добрый день.
В нашем интерфейсе добавить сертификаты можно только из объектов pkcs11
Самый простой способ - создать сессионные объекты нужных сертификатов и массив их handle-ов передать в те параметры, про которые вы написали

Как импортируются сертификаты можно посмотреть в SDK, для создания сессионных объектов (которые не записываются на токен и удалятся после закрытия сессии) надо задать в шаблоне сертификата CKA_TOKEN == false

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

Спасибо.
А подскажете какие примеры смотреть.

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

sdk\pkcs11\samples\PKIExtensions\ImportCertificate-GOST34.10-2012-256

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

Спасибо

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

День добрый.
Нашел в sdk\pkicore\cpp\samples\sources\CadesBesSign.cpp
Пример подписания Cades-Bes на токене, через библиотеку pkicore

cms::SignParams params(cert, cms::SignParams::Flag::addUserCert | cms::SignParams::Flag::addEssCert | cms::SignParams::Flag::hardwareHash | cms::SignParams::Flag::addSignTime);

auto signedData = cms::sign(data, params);

Но насколько я понимаю pkicore, только для Windows.
А какой код для того же был бы эквивалетным с точки зрения pkcs11+расширения ? (насколько я понимаю pkicore все равно его же в своих недрах и использует)

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

Подскажите, для моего второго вопроса лучше создать отдельную тему или на него здесь тоже смогут ответить?
Спасибо.

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

__Vladimir__, добрый день.
Библиотека pkicore доступна для платформ linux, MacOS, Windows.

__Vladimir__ пишет:

А какой код для того же был бы эквивалетным с точки зрения pkcs11+расширения ? (насколько я понимаю pkicore все равно его же в своих недрах и использует)

Вы имеете ввиду функцию  C_EX_Pkcs7Sign?

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

Аверченко Кирилл пишет:

__Vladimir__, добрый день.
Библиотека pkicore доступна для платформ linux, MacOS, Windows.

__Vladimir__ пишет:

А какой код для того же был бы эквивалетным с точки зрения pkcs11+расширения ? (насколько я понимаю pkicore все равно его же в своих недрах и использует)

Вы имеете ввиду функцию  C_EX_Pkcs7Sign?

Да

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

Написал тест с использованием C_EX_Pkcs7Sign.
Выпустил сертификат на фирму "РогаиКопыта", закинул на токен. Нашел его на токене, все как в примерах из апи + добавил сам сертификат к подписи

CHECK_PKCS11_ERROR(wrapper->pkcs7_sign(
                session.get_session_id(), (CK_BYTE_PTR)data.c_str(),
                static_cast<CK_ULONG>(data.length()), certificates.at(0),
                &signature, &signatureSize, private_keys.at(0), phCertificates, ulCertificatesLen, signFlags));

Пытаюсь проверить подпись на КриптоПро пишет
Подпись 1/1: ошибка при проверке (0x800b0109: Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия.)
    Отпечаток: 4D2AB4441898D4F9C618B48849DCFB0B23F431AD
    Имя субъекта: ООО "РогаиКопыта"


Как бы мне сделать подпись CadesBes с использованием C_EX_Pkcs7Sign и других базовых функций (+ расширений) PCKS11 чтобы его КриптоПро  кушал

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

На pkicore пока не пробовал, но пока интересны именно функции pkcs11

Re: Включение сертификата/цепочки сертификатов в C_EX_PKCS7Sign

__Vladimir__, добрый день!

Вас не затруднит подробней описать задачу и ограничения, чтобы мы могли определить, какие варианты вам могут подойти, какие нет? Если эта информация не для публичного распространения, наш e-mail hotline@rutoken.ru (можно с пометкой, что с форума).

Возможные требования:
1. Нужна какая-то подпись (устроит и PKCS7(CMS), и Cades-BES), которая проверяется через КриптоПро. В таком случае, необходимо знать, какой интерфейс проверки подписи вы используете: контролируемый вами или внешний сервис. Если сервис контролируется вами, какой код используется. Через расширенный интерфейс PKCS#11 есть возможность выполнить подпись в формате PKCS7(CMS), но нет возможности сделать Cades-BES.
2. Нужна подпись Cades-BES. Это требование не реализуется при использовании только реализации PKCS#11 от Рутокен, но реализуется с использованием этой реализации более высокоуровневыми библиотеками.

Выпустил сертификат на фирму "РогаиКопыта", закинул на токен.

__Vladimir__ пишет:

Подпись 1/1: ошибка при проверке (0x800b0109: Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия.)

Через какой УЦ был выпущен сертификат? Добавлен ли сертификат УЦ в корни доверия на ПК, на котором производился тест?