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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline alexl  
#11 Оставлено : 23 декабря 2014 г. 13:14:05(UTC)
alexl

Статус: Участник

Группы: Участники
Зарегистрирован: 21.05.2013(UTC)
Сообщений: 15
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
с пин кодом может быть проблема
Offline Chrome2000  
#12 Оставлено : 31 мая 2016 г. 10:02:50(UTC)
Chrome2000

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.05.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: СПб

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
Автор: alexl Перейти к цитате
Вот только с настройками у Вас что-то не так. SsfVersion нашего модля SSF должно вернуть примерно следующую строку "Crypto-Pro SSF library for SAP Version 1.01"


Похоже, что библиотека в качестве строки версии возвращает мусор.

Ни одним из имеющихся средств разработки не удалось получить нормальную строку.

1. Вот так возвращает SAP
ssf.png (5kb) загружен 39 раз(а).
Текст "SSFRFC V1.46.3" возвращается всегда, даже при отсутствии библиотеки. Это, похоже, некий префикс самого RFC.

2. Вот так возвращает Delphi.
ssf_pas.PNG (5kb) загружен 32 раз(а).

3. Вот так возвращает Visual Studio
SSF_vc.jpg (33kb) загружен 34 раз(а).

Уважаемые разработчики, проверьте, пожалуйста, библиотеку. Скачана была последняя версия.

Отредактировано пользователем 31 мая 2016 г. 10:03:22(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Chrome2000 за этот пост.
alexl оставлено 31.05.2016(UTC)
Offline alexl  
#13 Оставлено : 31 мая 2016 г. 11:37:57(UTC)
alexl

Статус: Участник

Группы: Участники
Зарегистрирован: 21.05.2013(UTC)
Сообщений: 15
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
Автор: Chrome2000 Перейти к цитате


Похоже, что библиотека в качестве строки версии возвращает мусор.

Уважаемые разработчики, проверьте, пожалуйста, библиотеку. Скачана была последняя версия.


Так и есть. Спасибо. Исправили.
На сайте выложена не последняя версия.
Завтра собурутся дистрибутивы. Обновим.

Отредактировано пользователем 31 мая 2016 г. 11:41:09(UTC)  | Причина: Не указана

Offline Chrome2000  
#14 Оставлено : 31 мая 2016 г. 12:17:37(UTC)
Chrome2000

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.05.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: СПб

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
Автор: alexl Перейти к цитате
Автор: Chrome2000 Перейти к цитате


Похоже, что библиотека в качестве строки версии возвращает мусор.

Уважаемые разработчики, проверьте, пожалуйста, библиотеку. Скачана была последняя версия.


Так и есть. Спасибо. Исправили.
На сайте выложена не последняя версия.
Завтра собурутся дистрибутивы. Обновим.


Это хорошо.
Подскажите тогда, пожалуйста, такой момент.

Проблема в подписывании и проверке данных.
Пытаюсь подписать данные в Delphi (временно, пока не дадут полномочий в SAP).

Трассировка.
Код:
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1260) : ****************#start#****************
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1262) : #info# SSFformat name ('PKCS7').
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1268) : #info#: accept isCades='0' 
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SSFAPICheckLicense/ ssfxxmain.cpp(15) : #trace# Check License.
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SSFAPICheckLicense/ ssfxxmain.cpp(18) : #trace# License - OK.
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1293) : #trace# Count of signers=2.
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1303) : #trace# Check Signer # = 0.
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1345) : #trace# Signer 0 Store = My.
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1374) : #info#: Searched userID (ac 26 d9 ac 86 ab 50 8f 8b 7c 7e c6 9a e0 bc b5 85 24 b7 b7)
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1396) : #trace# Search Signer's certificate.
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1421) : #trace# One of Signer's certificate found. Trying to acquire private key.
2016/05/31 10:46:30 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1430) : #trace# Explicit pin code? IsPinExplicit = 0.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1468) : #trace# Private Key successfully acquired.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1477) : #trace# Using hash alg = 1.2.643.2.2.9.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1303) : #trace# Check Signer # = 1.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1345) : #trace# Signer 1 Store = My.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1374) : #info#: Searched userID (ac 26 d9 ac 86 ab 50 8f 8b 7c 7e c6 9a e0 bc b5 85 24 b7 b7)
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1396) : #trace# Search Signer's certificate.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1421) : #trace# One of Signer's certificate found. Trying to acquire private key.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1430) : #trace# Explicit pin code? IsPinExplicit = 0.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1468) : #trace# Private Key successfully acquired.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1477) : #trace# Using hash alg = 1.2.643.2.2.9.
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1563) : #trace#: trying to sign message...
2016/05/31 10:46:31 : cpsapssf.dll: {17284} /SsfSign/ ssfxxmain.cpp(1666) : ++++++++++++++++#success#++++++++++++++++


(тут отдельный вопрос про количество подписантов. В логе Count of signers=2, но это не так - в списке всего один подписант передаётся)

На выходе некий поток данных.

Отправляю этот же поток на проверку подписи.

Код:
2016/05/31 10:47:02 : cpsapssf.dll: {17284} /SsfVerify/ ssfxxmain.cpp(1783) : ****************#start#****************
2016/05/31 10:47:02 : cpsapssf.dll: {17284} /SsfVerify/ ssfxxmain.cpp(1786) : #info# SSFformat name ('PKCS7_ANY').
2016/05/31 10:47:02 : cpsapssf.dll: {17284} /SsfVerify/ ssfxxmain.cpp(1792) : #info#: accept isCades='0' 
2016/05/31 10:47:02 : cpsapssf.dll: {17284} /SSFAPICheckLicense/ ssfxxmain.cpp(15) : #trace# Check License.
2016/05/31 10:47:02 : cpsapssf.dll: {17284} /SSFAPICheckLicense/ ssfxxmain.cpp(18) : #trace# License - OK.
2016/05/31 10:47:02 : cpsapssf.dll: {17284} /SsfVerify/ ssfxxmain.cpp(1821) : #error#: Invalid message format?.
2016/05/31 10:47:02 : cpsapssf.dll: {17284} /SsfVerify/ ssfxxmain.cpp(1822) : #error#: 8009310b
2016/05/31 10:47:02 : cpsapssf.dll: {17284} /PrintString/ cpsapssf.cpp(443) : Встречено неверное значение тега ASN1.

2016/05/31 10:47:02 : cpsapssf.dll: {17284} /SsfVerify/ ssfxxmain.cpp(1824) : !!!!!!!!!!!!!!!!#error#!!!!!!!!!!!!!!!!


Сохраняю поток в файл. Сам КриптоПро его не понимает, неверный формат. Ожидается ASN.1? Зачем?

Что не так делаю? С версией кучу времени убил, считая, что неверно результат как-то интерпретирую, в том числе и подписи.

Отредактировано пользователем 31 мая 2016 г. 12:45:54(UTC)  | Причина: неверное количество подписантов в логе

Offline alexl  
#15 Оставлено : 31 мая 2016 г. 12:49:43(UTC)
alexl

Статус: Участник

Группы: Участники
Зарегистрирован: 21.05.2013(UTC)
Сообщений: 15
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
Автор: Chrome2000 Перейти к цитате
На выходе некий поток данных.

Отправляю этот же поток на проверку подписи.


Не знаю, как там в дельфи со строками, указателями на строки.
SsfSign возвращает результат в виде закодированного в ASN1 PKCS7(CMS)-сообщения электронной подписи как указатель на указатель буффера, содржащего эти двоичные данные. Соответственно возвращается и длина этого буффера (сообщения), как указатель на 4-хбайтовый int.
Они возвращаются в последних двух параметрах SsfSign.

Если Вы правильно интерпретируете у себя все эти указатели и правильно сохраняете результат-сообщение в файл, то утилита dumpasn1 (http://www.cryptopro.ru/downloads) должна без ошибок раскодировать это pkcs7 сообщение. Проверьте.


Возврщенный буффер с длиной подаются ф-ции SsfVerify как 4-ый и 5-ый параметр, но уже не как указатель на указатель и указатель на int, а как просто указатель на буффер и int. В качестве 5-го и 6-го параметра передаются исходные (подписываемые) данные - те же что использовались для формирования подписи SsfSign-ом, но только в том случае, если подпись отсоединенная (detached)

Думаю, где-то с указателями путанница
thanks 1 пользователь поблагодарил alexl за этот пост.
Chrome2000 оставлено 31.05.2016(UTC)
Offline alexl  
#16 Оставлено : 31 мая 2016 г. 13:00:33(UTC)
alexl

Статус: Участник

Группы: Участники
Зарегистрирован: 21.05.2013(UTC)
Сообщений: 15
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
Автор: Chrome2000 Перейти к цитате
(тут отдельный вопрос про количество подписантов. В логе Count of signers=2, но это не так - в списке всего один подписант передаётся)


Сайнеров у вас два (одинаковых, насколько я вижу). Проверяйте. Неверно формируете SignerList

Из кода Ssf:
//подсчитываем число подписантов
for (count = 0, ptrHelp = signerList; (ptrHelp != NULL);
ptrHelp = ptrHelp->ptrNextSigRcp )
{
count++;
} /* endfor */
CPTRACE2(CPTraceGeneral, 4, "#trace# Count of signers=%d.\n", count, "");

Дальше идет такой же цикл обработки по этому списку
Offline Chrome2000  
#17 Оставлено : 31 мая 2016 г. 14:19:53(UTC)
Chrome2000

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.05.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: СПб

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
Автор: alexl Перейти к цитате
Автор: Chrome2000 Перейти к цитате
(тут отдельный вопрос про количество подписантов. В логе Count of signers=2, но это не так - в списке всего один подписант передаётся)


Сайнеров у вас два (одинаковых, насколько я вижу). Проверяйте. Неверно формируете SignerList


Разобрался. Проблема была-таки с указателями.

Отредактировано пользователем 31 мая 2016 г. 15:07:29(UTC)  | Причина: Не указана

Offline Chrome2000  
#18 Оставлено : 31 мая 2016 г. 14:37:53(UTC)
Chrome2000

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.05.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: СПб

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
Автор: alexl Перейти к цитате
как указатель на указатель буффера, содржащего эти двоичные данные.
...
Думаю, где-то с указателями путанница

Да, с указателями была проблема. Данные пришли нормально.

Спасибо за пояснение.

Отредактировано пользователем 31 мая 2016 г. 14:41:31(UTC)  | Причина: Не указана

Offline alexl  
#19 Оставлено : 31 мая 2016 г. 15:08:05(UTC)
alexl

Статус: Участник

Группы: Участники
Зарегистрирован: 21.05.2013(UTC)
Сообщений: 15
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 2 раз в 2 постах
Автор: Chrome2000 Перейти к цитате
Передаю nil вместо списка - Count of signers = 1 )))


Не знаю, в качестве чего вы nil передаете )


SAPRETURN WINAPI SsfSign(
const SsfCharstring strFormat,
SsfCharlen strFormatL,
const SsfCharstring strHashalg,
SsfCharlen strHashalgL,
SAP_BOOL bIncCerts,
SAP_BOOL bDetached,
const SsfOctetstring ostrInputData,
SsfOctetlen ostrInputDataL,
SigRcpSsfInformationList signerList,
SsfOctetstring * ostrSignedData,
SsfOctetlen * ostrSignedDataL)
{
.......................................
.......................................
//empty signer list?
if (signerList == NULL) {
CPSAPTRACE2(CPTraceGeneral, 2, "#error#: Empty signer's list\n", "");
SSF_API_ERROR
return SSF_API_SIGNER_ERRORS;
}

.......................................
SigRcpSsfInformationList ptrHelp = NULL; /* run for list */
.......................................
//подсчитываем число подписантов
for (count = 0, ptrHelp = signerList; (ptrHelp != NULL);
ptrHelp = ptrHelp->ptrNextSigRcp )
{
count++;
} /* endfor */
CPTRACE2(CPTraceGeneral, 4, "#trace# Count of signers=%d.\n", count, "");


передаваемый в SsfSign параметр signerList (SigRcpSsfInformationList) уже является первым элементом списка (указатель на первую структуру списка).

Пример на языке C правильного формирования списка (для 2-х подписантов):

SigRcpSsfInformationList signerList = NULL;
PtrSigRcpSsfInformation ptrSigRcpSsfInfo1;
PtrSigRcpSsfInformation ptrSigRcpSsfInfo2;

SsfNEWSigRcpSsfInfo((SsfOctetstring)"CN=User1", 8, NULL, 0,(SsfOctetstring)"uMy",3,(SsfOctetstring)"12345678",8,0,&ptrSigRcpSsfInfo1);
SsfNEWSigRcpSsfInfo((SsfOctetstring)"CN=User2", 8, NULL, 0,(SsfOctetstring)"uMy",3,(SsfOctetstring)"12345678",8,0,&ptrSigRcpSsfInfo2);

SsfINSSigRcpSsfInfo(ptrSigRcpSsfInfo1,&signerList); //в первый раз signerList = NULL, после вызова уже указывает на первый элемент списка
SsfINSSigRcpSsfInfo(ptrSigRcpSsfInfo2,&signerList); //если нужен второй подписант в списке
.....................................
res = SsfSign(
strFormat, strlen(strFormat),
strHashalg,strlen(strHashalg),
bIncCerts, bDetached,
ostrEncodedData, ostrEncodedDataL,
signerList,
&ostrSignedData,
&ostrSignedDataL);



Offline Chrome2000  
#20 Оставлено : 31 мая 2016 г. 15:09:56(UTC)
Chrome2000

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.05.2016(UTC)
Сообщений: 6
Российская Федерация
Откуда: СПб

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
Автор: alexl Перейти к цитате
Автор: Chrome2000 Перейти к цитате
Передаю nil вместо списка - Count of signers = 1 )))


Не знаю, в качестве чего вы nil передаете )


Да, я всё понял. Неверно интерпретировал типы параметров ))

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