(2014-11-10 21:09:22 отредактировано abondarenko)

Формирование PKCS#7 конверта из сертификата

Добрый день!

Как подписать данные на токене в формате PKCS#7.

В пример на С код выглядит следующим образом:

        rv = _extendedFunctions->C_EX_PKCS7Sign(_hSession, -- объект сессии
                                                data, -- ссылка на данные
                                                dataLength, -- длина данных
                                                certHandler, -- объект сертификата
                                                &envelope, -- выходной конверт
                                                &envelopeLen, -- длина вых. конверта
                                                privKeyHandler, -- объект приватного ключа
                                                NULL, 0,
                                                PKCS7_DETACHED_SIGNATURE);

Как из сертификата получить объект приватного ключа?

Заранее спасибо!

Re: Формирование PKCS#7 конверта из сертификата

Чтобы найти объект приватного ключа связанного с этим сертификатом надо поискать объекты CKO_PRIVATE_KEY с тем же CKA_ID что и у сертификата. Это не 100% надёжный способ, но обычно работает.

Re: Формирование PKCS#7 конверта из сертификата

Кирилл Мещеряков пишет:

Чтобы найти объект приватного ключа связанного с этим сертификатом надо поискать объекты CKO_PRIVATE_KEY с тем же CKA_ID что и у сертификата. Это не 100% надёжный способ, но обычно работает.

Функции расширения pkcs#11 будут работать с RSA ключами? Конкретно интересуют функции C_EX_CreateCSR, C_EX_GetCertificateInfoText, C_EX_PKCS7Sign.

Re: Формирование PKCS#7 конверта из сертификата

abondarenko пишет:
Кирилл Мещеряков пишет:

Чтобы найти объект приватного ключа связанного с этим сертификатом надо поискать объекты CKO_PRIVATE_KEY с тем же CKA_ID что и у сертификата. Это не 100% надёжный способ, но обычно работает.

Функции расширения pkcs#11 будут работать с RSA ключами? Конкретно интересуют функции C_EX_CreateCSR, C_EX_GetCertificateInfoText, C_EX_PKCS7Sign.

Нет, они сделаны специально для ГОСТ применений.

Те же самые вещи, но с RSA можно делать через OpenSSL API.

Re: Формирование PKCS#7 конверта из сертификата

Кирилл Мещеряков пишет:
abondarenko пишет:
Кирилл Мещеряков пишет:

Чтобы найти объект приватного ключа связанного с этим сертификатом надо поискать объекты CKO_PRIVATE_KEY с тем же CKA_ID что и у сертификата. Это не 100% надёжный способ, но обычно работает.

Функции расширения pkcs#11 будут работать с RSA ключами? Конкретно интересуют функции C_EX_CreateCSR, C_EX_GetCertificateInfoText, C_EX_PKCS7Sign.

Нет, они сделаны специально для ГОСТ применений.

Те же самые вещи, но с RSA можно делать через OpenSSL API.

А как это можно делать на iOS через Bluetooth?

Re: Формирование PKCS#7 конверта из сертификата

Ну связка примерно такая получится:
у вас есть ObjectiveC приложение. К нему подключаете собранный для iOS OpenSSL + engine_pkcs11.
Загружаете engine_pkcs11 и нашу pkcs#11 библиотеку в OpenSSL и из ObjectiveC дергаете API OpenSSL.

Re: Формирование PKCS#7 конверта из сертификата

Кирилл Мещеряков пишет:

Ну связка примерно такая получится:
у вас есть ObjectiveC приложение. К нему подключаете собранный для iOS OpenSSL + engine_pkcs11.
Загружаете engine_pkcs11 и нашу pkcs#11 библиотеку в OpenSSL и из ObjectiveC дергаете API OpenSSL.

Я полагал, что запрос на сертификат генерируется на токене. Как предложенный метод решит проблему?

Re: Формирование PKCS#7 конверта из сертификата

abondarenko пишет:
Кирилл Мещеряков пишет:

Ну связка примерно такая получится:
у вас есть ObjectiveC приложение. К нему подключаете собранный для iOS OpenSSL + engine_pkcs11.
Загружаете engine_pkcs11 и нашу pkcs#11 библиотеку в OpenSSL и из ObjectiveC дергаете API OpenSSL.

Я полагал, что запрос на сертификат генерируется на токене. Как предложенный метод решит проблему?

Запрос на сертификат, это всего лишь ASN1 структура к которой прикреплена подпись.
Подпись, да, конечно, генерируется на токене. Но сам запрос создаёт OpenSSL, хеширует его, отправляет хеш на токен для подписи. А получив подпись от токена, тот же OpenSSL прикрепляет её к структуре.

Re: Формирование PKCS#7 конверта из сертификата

Кирилл Мещеряков пишет:
abondarenko пишет:
Кирилл Мещеряков пишет:

Ну связка примерно такая получится:
у вас есть ObjectiveC приложение. К нему подключаете собранный для iOS OpenSSL + engine_pkcs11.
Загружаете engine_pkcs11 и нашу pkcs#11 библиотеку в OpenSSL и из ObjectiveC дергаете API OpenSSL.

Я полагал, что запрос на сертификат генерируется на токене. Как предложенный метод решит проблему?

Запрос на сертификат, это всего лишь ASN1 структура к которой прикреплена подпись.
Подпись, да, конечно, генерируется на токене. Но сам запрос создаёт OpenSSL, хеширует его, отправляет хеш на токен для подписи. А получив подпись от токена, тот же OpenSSL прикрепляет её к структуре.

А за что отвечает ваша библиотека librtpkcs11ecp? Как подобную схему работы можно попробовать через USB в терминале без сборок OpenSSL?

Re: Формирование PKCS#7 конверта из сертификата

библиотека pkcs#11 транслирует запрос на подпись конверта от OpenSSL и engine_pkcs11 непосредственно на токен. и возвращает результат.

Инструкций как завести OpenSSL на смарт-карту или токен полным полно в интернете. Вот даже у нас на форуме встречается: https://forum.rutoken.ru/topic/2037/

Re: Формирование PKCS#7 конверта из сертификата

Кирилл Мещеряков пишет:

библиотека pkcs#11 транслирует запрос на подпись конверта от OpenSSL и engine_pkcs11 непосредственно на токен. и возвращает результат.

Инструкций как завести OpenSSL на смарт-карту или токен полным полно в интернете. Вот даже у нас на форуме встречается: https://forum.rutoken.ru/topic/2037/

Может у вас есть пример создания связки OpenSSL + engine_pkcs11. Не удалось найти ничего подходящего

Re: Формирование PKCS#7 конверта из сертификата

http://dev.rutoken.ru/pages/viewpage.ac … d=12222504

Re: Формирование PKCS#7 конверта из сертификата

Кирилл Мещеряков пишет:

http://dev.rutoken.ru/pages/viewpage.ac … d=12222504

На эту страницу нет доступа.

Re: Формирование PKCS#7 конверта из сертификата

https://forum.rutoken.ru/topic/2003/
https://forum.rutoken.ru/topic/2125/