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

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
Offline Павел Смирнов  
#11 Оставлено : 6 декабря 2010 г. 17:38:03(UTC)
Павел Смирнов

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Попробуйте сохранить сертификат из штампа в файл и проверить его стандартными средствами.
Например, certutil -verify <имя файла>.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ZaaZ  
#12 Оставлено : 6 декабря 2010 г. 19:51:30(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
Смирнов написал:
Попробуйте сохранить сертификат из штампа в файл и проверить его стандартными средствами.
Например, certutil -verify <имя файла>.

Встроил в код после создания штампа времени Smtp.Display и еще дополнительно сделал показ информации о подписи CadesUIDisplaySignatures.
Если использую TSP Сервер от Крипто-про.
Получается такая штука, штамп-времени создается, но почему-то в строке Подпись пишется: Верна, но сертификат не кор...
При проверке через CadesUIDisplaySignatures показывает в форме что подпись Cades-Bes действительна и сертификат рабочий.

Если использую TSP Сервер от ТрансТелеКом'a
Штамп-времени создается, и в строке Подпись так-же пишется: Верна, но сертификат не кор...
При проверке через CadesUIDisplaySignatures показывает в форме что подпись Cades-Bes действительна недействительна и не удалось построить цепочку сертификатов.
Соответственно и сертификат TSP отображается недействительным.

Хотя! Если брать на проверку чужой штамп-времени, проверка проходит нормально без ошибок.
Наверное косяк при создании или что-то я дополнительно забываю указывать в параметрах при запросе TSP.

Отредактировано пользователем 7 декабря 2010 г. 11:51:55(UTC)  | Причина: Не указана

Offline Павел Смирнов  
#13 Оставлено : 7 декабря 2010 г. 0:32:13(UTC)
Павел Смирнов

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Ничего не понял из Вашего текста. Давайте по порядку. Если вы создаёте и проверяете усовершенствованную ЭЦП, то зачем вам отдельно получать и проверять штамп времени?

P.S. Сохраните штамп в файл с расширением .tsr и откройте этот файл для просмотра штампа - там можно найти и посмотреть сертификат. Штамп также можно получить с помощью утилиты tsputil. Также можно в коде позвать CStamp::Display(). В общем, есть масса способов для извлечения сертификата.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ZaaZ  
#14 Оставлено : 7 декабря 2010 г. 11:54:43(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
Смирнов написал:
Ничего не понял из Вашего текста. Давайте по порядку. Если вы создаёте и проверяете усовершенствованную ЭЦП, то зачем вам отдельно получать и проверять штамп времени?

Переписал выше пост, дабы убрать всю воду.
Есть такая система ЭТРАН, она требует отдельно ЭЦП и отдельно TSP.

Цитата:

P.S. Сохраните штамп в файл с расширением .tsr и откройте этот файл для просмотра штампа - там можно найти и посмотреть сертификат. Штамп также можно получить с помощью утилиты tsputil. Также можно в коде позвать CStamp::Display(). В общем, есть масса способов для извлечения сертификата.

В общем результаты я описал выше.
Offline ZaaZ  
#15 Оставлено : 7 декабря 2010 г. 15:10:50(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
Попробовал сделать так: Чистый winXP sp3, установил установочный пакет от ТТК, версия CSP 3.6.5355.
Соответственно все цепочки сертификатов установились из пакета.
Установил tsputil, сделал 2 запросa: tsputil makestamp -u http://cryptopro.ru/tsp/tsp.srf text.txt tsp.tsr
tsputil makestamp -u http://tsp.pki.transtk.ru/tspca1/tsp.srf text.txt tsp2.tsr.

В итоге, то что tsp.tsr - Подпись верна, но не находит УЦ КриптоПро - в принципе все верно, сертификаты КриптоПро я не ставил.
То что tsp2.tsr - подпись верна, но сертификат не проходит, хотя цепочка сертификатов до УЦ ТТК верна.

Навевает на мысль что либо не туда обращаюсь, либо что-то не то

P.S. Все дело было в старых сертификатов от ТТК, блин, инсталляшка оказалась еще с января месяца.
Скачал новые сертификаты с сайта ТТК, установил, все поехало.
Спасибо. Тему можно закрыть.

Отредактировано пользователем 7 декабря 2010 г. 23:08:41(UTC)  | Причина: Не указана

Offline ZaaZ  
#16 Оставлено : 6 марта 2012 г. 20:03:59(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
При получении штампа времени для создания хэш значения использовал такой код:
Код:
	
IHashedDataPtr iHashedData(__uuidof(HashedData));
iHashedData->Algorithm = CAPICOM_HASH_ALGORITHM_SHA1;
_bstr_t t1=(_bstr_t) s;
iHashedData->Hash(t1);
_bstr_t tH = iHashedData->Value;


Но появилась необходимость сделать создание TSP для консольного приложения, а интерфейс IHashedDataPtr используется только для Десктоп приложений и для консольных не подходит.
Начал искать замену. В итоге нашел два варианта:
1) Использовать прямой код TSP SDK
Код:

	CRequest Req;
        Req.put_DataHashAlg(CALG_SHA1);
        Req.AddData((unsigned char *)s,strlen(s));

2) Используя CryptoAPI:
Код:

    LPSTR tohash =s;
    HCRYPTPROV hProv;
    HCRYPTHASH hash;
 
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,CRYPT_VERIFYCONTEXT))
 
    CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hash)
    
    CryptHashData(hash, (BYTE *)&tohash, sizeof(tohash), 0)
        
    ZeroMemory(&Buf, sizeof(Buf));
    BufSize = sizeof(Buf);
 
    CryptGetHashParam(hash, HP_HASHVAL,(BYTE *) &Buf, &BufSize, 0))


В итоге получается каждый раз разный хэш от одних данных не совпадающий с исходным.

Отредактировано пользователем 6 марта 2012 г. 20:05:16(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#17 Оставлено : 6 марта 2012 г. 20:22:59(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
CryptHashData(hash, (BYTE *)&tohash, sizeof(tohash), 0)

&tohash - это char**, а Вы его преобразовываете к BYTE*. & тут лишний
sizeof(tohash)=4 - размер указателя, а Вам нужна длина строки

Отредактировано пользователем 6 марта 2012 г. 20:28:14(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline ZaaZ  
#18 Оставлено : 7 марта 2012 г. 14:35:59(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
Kirill Sobolev написал:
Цитата:
CryptHashData(hash, (BYTE *)&tohash, sizeof(tohash), 0)

&tohash - это char**, а Вы его преобразовываете к BYTE*. & тут лишний
sizeof(tohash)=4 - размер указателя, а Вам нужна длина строки

Поменял sizeof на strlen(tohash), начал считать правильно длину.

Но хэш с оригинальным почему-то не сходится.

Итак проверил через веб сайты, хэш строки: Proverka
Результат SHA1 - ba65a6245dc80208fcae5e4a8bbbd39cb2d1da89

Если кодировать через IHashedDataPtr то результат будет - 5E366E4231D23B55711A6FD06FCC03D71AF3FBEA
Если через ryptHashData(hash, (BYTE *)&tohash, strlen(tohash), 0) - ba65a6245dc80208fcae5e4a8bbbd39cb2d1da89
Если через Req.AddData((unsigned char *)s,strlen(s)) - BA65A6245DC80208FCAE5E4A8BBBD39CB2D1DA89

Странно как-то, при то что вариант хэш через IHashedDataPtr нормально принимается АСУ ЭТРАН.

После праздников буду дальше разбираться.


Offline Kirill Sobolev  
#19 Оставлено : 7 марта 2012 г. 15:49:59(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
Если кодировать через IHashedDataPtr то результат будет - 5E366E4231D23B55711A6FD06FCC03D71AF3FBEA

Хэш считаеся от юникодной строки.
Если в коде
Код:
IHashedDataPtr iHashedData(__uuidof(HashedData));
iHashedData->Algorithm = CAPICOM_HASH_ALGORITHM_SHA1;
_bstr_t t1=(_bstr_t) s;
iHashedData->Hash(t1);
_bstr_t tH = iHashedData->Value;

s - это char*, то вызывайте
iHashedData->Hash(SysAllocStringByteLen(s, strlen(s)));

Техническую поддержку оказываем тут
Наша база знаний
Offline ZaaZ  
#20 Оставлено : 11 марта 2012 г. 12:19:00(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
Kirill Sobolev написал:
Цитата:
Если кодировать через IHashedDataPtr то результат будет - 5E366E4231D23B55711A6FD06FCC03D71AF3FBEA

Хэш считаеся от юникодной строки.

Да, в идеале считается от юникодной, только в АСУ ЭТРАН сделано по другому и хэш считается от простой строки, почему и возникают проблемы при его формировании.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
4 Страницы<1234>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.