Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline ZaaZ  
#1 Оставлено : 21 июня 2010 г. 14:33:30(UTC)
ZaaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.04.2009(UTC)
Сообщений: 30
Откуда: Череповец

Поблагодарили: 1 раз в 1 постах
Поставил КриптоПро TSP SDK (версия 1.01.0614)
Пробую в VS 2008 простой пример консольный:
Цитата:

#include "stdafx.h"
#include <_tspcli.h>
#include <_wincryptex.h>

int main()
{
CRequest Request;
Request.put_DataHashAlg(szOID_CP_GOST_R3411);
return 0;
}


В итоге получаю:

Цитата:

Error 1 error LNK2028: unresolved token (0A000292) "public: __thiscall CryptoPro::PKI::TSP::Client::CRequest::~CRequest(void)" (??1CRequest@Client@TSP@PKI@CryptoPro@@$$FQAE@XZ)
Error 2 error LNK2028: unresolved token (0A000293) "public: __thiscall CryptoPro::PKI::TSP::Client::CRequest::CRequest(void)" (??0CRequest@Client@TSP@PKI@CryptoPro@@$$FQAE@XZ)
.......


Пробую в Builder C++ 6.0, переделав tspcli.lib с помощью coff2omf.exe
Цитата:

#include <_tspcli.h>
#include <_wincryptex.h>

int CreateTSP(){
// unsigned char Text[5] = "ABCD";
CRequest Request;

Request.put_DataHashAlg(szOID_CP_GOST_R3411);
//CStamp Stamp();
//request.put_DataHashAlg(szOID_CP_GOST_R3411);
// request.AddData(Text,4);
// request.put_TSAAddress(L"http://cryptopro.ru/tsp/tsp.srf");
return 0;
}


В итоге получаю тот результат:
Цитата:

[Linker Error] Unresolved external 'CryptoPro::PKI::TSP::Client::CRequest::~CRequest()' referenced from C:\TEST3\UNIT1.OBJ
[Linker Error] Unresolved external 'CryptoPro::PKI::TSP::Client::CRequest::CRequest()' referenced from C:\TEST3\UNIT1.OBJ
[Linker Error] Unresolved external 'CryptoPro::PKI::TSP::Client::CRequest::put_DataHashAlg(const char *)' referenced from C:\TEST3\UNIT1.OBJ


Пути в проектах прописаны к CryptoPro\SDK\include и CryptoPro\SDK\lib

Как я понимаю не правильно создаются классы, хотя если убрать Request.put_DataHashAlg(szOID_CP_GOST_R3411), ошибки пропадают.
Как с этим бороться?

Отредактировано пользователем 21 июня 2010 г. 14:38:08(UTC)  | Причина: Не указана

Offline ZaaZ  
#2 Оставлено : 21 июня 2010 г. 18:42:44(UTC)
ZaaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.04.2009(UTC)
Сообщений: 30
Откуда: Череповец

Поблагодарили: 1 раз в 1 постах
В VS2008 помогло указанием библиотеки в коде:
Цитата:

#pragma comment(lib, "tspcli.lib")


Остается побороть Builder, в нем такое не прокатило
Offline Павел Смирнов  
#3 Оставлено : 28 июня 2010 г. 13:17:48(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
При компоновке конечно же надо подать tspcli.lib. Один из способов для Visual Studio Вы описали. Ещё можно делать так. По сути это добавит в вызов link.exe аргументом tspcli.lib.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ZaaZ  
#4 Оставлено : 1 июля 2010 г. 19:38:10(UTC)
ZaaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.04.2009(UTC)
Сообщений: 30
Откуда: Череповец

Поблагодарили: 1 раз в 1 постах
Win XP SP3 OCSP, ЭЦП SDK, TSP SDK
Вот код:
Цитата:

Req.put_TSAAddress(L"http://cryptopro.ru/tsp/tsp.srf");
unsigned char Text[5] = "ABCD";
Req.put_DataHashAlg(CALG_GR3411);
//Req.AddData(Text,4);
Req.put_DataHash(Text, 4);
Req.put_CertReq(true);
CStamp Stmp(Req.Send());
unsigned long size;
Stmp.Export(NULL, &size);
unsigned char *buffer = (unsigned char *)malloc(size);
Stmp.Export(buffer, &size);


Если использовать Req.put_DataHash() при выполнении CStamp Stmp(Req.Send()); валится в ошибку "External Exeption E06D7363".
Если использовать Req.AddData(Text,4) то создает TSP.

На другой машине с winXP SP3 в обоих случаях валится в ошибку.
Что ему не хватает и в чем разница между этими методами?
Offline Павел Смирнов  
#5 Оставлено : 2 июля 2010 г. 13:26:45(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Метод put_DataHash() задаёт уже подсчитанное хэш-значение. Для алгоритма CALG_GR3411 длина хэш-значения не равна 4 байтам, что обнаруживает служба штампов времени и выдаёт ошибку.

На другой машине предположительно не удаётся посчитать хэш по алгоритму CALG_GR3411. Установлен ли КриптоПро CSP? Какой код ошибки и из какого метода прилетает исключение?
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ZaaZ  
#6 Оставлено : 2 июля 2010 г. 15:52:45(UTC)
ZaaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.04.2009(UTC)
Сообщений: 30
Откуда: Череповец

Поблагодарили: 1 раз в 1 постах
Смирнов написал:
На другой машине предположительно не удаётся посчитать хэш по алгоритму CALG_GR3411. Установлен ли КриптоПро CSP? Какой код ошибки и из какого метода прилетает исключение?

Вылетает на методе Request.AddData() "External Exeption E06D7363", причем вне зависимости от того установлен Алгоритм хеширования данных (put_DataHashAlg(CALG_GR3411)) или нет.
CSP строит csp-win32-kc2-rus_3.6.6253. На всех машинах один и тот-же.

Еще в Руководстве программиста сказано : "Алгоритм хеширования необходимо задавать до первого вызова AddData(), иначе это приведет к ошибке". Но на тех машинах на которых TSP создается нормально работают варианты как с указанием так и без указания алгоритма.


P.S. проверил на двух других Win XP3, работает без ошибок.

Отредактировано пользователем 2 июля 2010 г. 15:53:23(UTC)  | Причина: Не указана

Offline Павел Смирнов  
#7 Оставлено : 2 июля 2010 г. 15:55:53(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
"External Exeption E06D7363" к сожалению нам ни о чём не говорит. Вы можете перехватить исключение CAtlException и глянуть в m_hr?
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ZaaZ  
#8 Оставлено : 6 декабря 2010 г. 12:57:43(UTC)
ZaaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.04.2009(UTC)
Сообщений: 30
Откуда: Череповец

Поблагодарили: 1 раз в 1 постах
Возвращусь к ошибкам.
Вышеописанный код то работает то нет, на одном компьютере нормально создается штамп времени,
на другом пишет ошибку: "Нельзя проверить подпись сертификата"
на третьем другую: "Указаны неправильные флаги"

Везде winXP sp3, конфигурация ПО крип-то про одинаковая, пробовал с ECP SDK 1.01.0482 и TSP SDK 1.01.0614
и с ECP SDK 1.02.0646 и TSP SDK 1.01.0707 история одна и та-же.

Хотелось бы получить побольше информации по данным ошибкам.
Offline Павел Смирнов  
#9 Оставлено : 6 декабря 2010 г. 13:11:07(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Хотелось бы получить побольше информации о местах возникновения ошибок с примерами кода и логами отладочной печати.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ZaaZ  
#10 Оставлено : 6 декабря 2010 г. 17:32:39(UTC)
ZaaZ

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.04.2009(UTC)
Сообщений: 30
Откуда: Череповец

Поблагодарили: 1 раз в 1 постах
Использую Visual Studio 2008, вот код:
Цитата:

CRequest Req;
Req.put_TSAAddress(L"http://cryptopro.ru/tsp/tsp.srf");
Req.put_DataHashAlg(szOID_CP_GOST_R3411);
Req.AddData((unsigned char *)s,MessageSizeArray);
Req.put_CertReq(true);
CStamp Stmp(Req.Send(false));
Stmp.Verify();
Stmp.VerifyCertificate();
unsigned long size;
Stmp.Export(NULL, &size);
unsigned char *buffer = (unsigned char *)malloc(size);
Stmp.Export(buffer, &size);


Как было замечено валится на проверке сертификата Stmp.VerifyCertificate();
Причем, если использую сервер: "http://cryptopro.ru/tsp/tsp.srf"
возникают две ошибки: "Указаны неправильные флаги" и "Невозможно проверить фунцкцию отзыва т.к. сервер отзыва сертификатов недоступен" - последнее я думаю из-за OCSP клиента который в лог сыплет ошибками при вызове TSP.

Еще пробую взять штамп-времени с http://tsp.pki.transt.ru/tspca1/tsp.srf, но тут возникает другая ошибка:
"Нельзя проверить подпись сертификата."
Судя по описанию Stmp.VerifyCertificate() - Выполняет проверку сертификата с построением цепочки до доверенного корневого УЦ и проверкой статусов всех сертификатов цепочки, кроме корневого.
т.е. не хватает сертификата в цепочке...
Вообще тут речь идет о каком сертификате? Вроде как кроме сертификата сервера штампа-времени в получении TSP никакие больше не участвуют...
Получается он не может найти цепочку достоверности этого сертификата?

P.S. Можно так-то не использовать проверку, только получается не факт что будет достоверность TSP.

Хотя все сертификаты и цепочки взяты из последнего установочного пакета от ТрансТелекома.

Отредактировано пользователем 6 декабря 2010 г. 17:35:59(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.