Ошибка при формировании PKCS7 подписи в Рутокен ЭЦП с помощью OpenSSL

Добрый день.

С мая 2013 использую ваше решение (Рутокен ЭЦП с OpenSSL) для формирования PKCS7 подписи. До недавнего времени все работало замечательно, но на новом Рутокене подпись перестала формироваться.

Ошибка:

error:80028150:Vendor defined:PKCS11_get_attribute:Buffer too small

Код программы, где появляется ошибка:

   if(!ENGINE_ctrl(engine_pkcs11, CMD_LOAD_CERT_CTRL, 0, &cert_info, NULL)) {
        fprintf(stdout, "%s", ERR_error_string(ERR_get_error(), NULL));
        EVP_PKEY_free(pKey);
        UnloadEngine(engine_pkcs11);       
        return NULL;   
    }

Как я понимаю, не извлекается сертификат. Через интерфейс PKCS11 сертификат извлекается нормально.

Версия токена  - 20.04.18.00

Re: Ошибка при формировании PKCS7 подписи в Рутокен ЭЦП с помощью OpenSSL

Большое спасибо за оставленную информацию.

Отдел технической поддержки уже занимается данным вопросом.
Если возможно напишите, пожалуйста, версию установленных у вас драйверов Rutoken (для определения используемой вами библиотеки rtpkcs11ECP.dll), версию дистрибутива openssl, а так же модель токена на котором ошибка не возникала.
Данная информация должна в большой степени сократить время решения вашей проблемы.

Re: Ошибка при формировании PKCS7 подписи в Рутокен ЭЦП с помощью OpenSSL

Версия rtPKCS11ECP.dll - 1.0.50.0.  Пробовал и новую версию 1.1.3.0 - та же ошибка.
OpenSSL сейчас - 1.0.1f.

Re: Ошибка при формировании PKCS7 подписи в Рутокен ЭЦП с помощью OpenSSL

Да, версия токена, на котором у меня все работает 17.00.12.00.  Но  Рутокен ЭЦП  используют несколько десятков наших клиентов и версии у всех наверняка разные.

Re: Ошибка при формировании PKCS7 подписи в Рутокен ЭЦП с помощью OpenSSL

На данный момент воспроизвести ошибку, в указанных вами условиях, не удаётся. Для более детального изучения хорошо было бы получить от Вас "проблемные" токены.

Так же по некоторой информации, я так понимаю, Вам удалось обойти описанную проблему? Если так, не могли бы Вы поделиться путями её решения.

Re: Ошибка при формировании PKCS7 подписи в Рутокен ЭЦП с помощью OpenSSL

Проблему удалось обойти следующим образом:

1) Считываем сертификат с токена через PKCS11 интерфейс.
2) Сохраняем сертификат в файле в формате PEM.
3) В функцию формирования подписи передаем путь к файлу и загружаем сертификат:
        bio_cert=BIO_new_file(cert_path, "rb");
        cert=PEM_read_bio_X509(bio_cert, NULL, NULL, NULL);
        BIO_free(bio_cert);

Можно не сохранять сертификат в файле, а сразу передать в функцию строку с сертификатом, но нам так удобнее.