Статус: Новичок
Группы: Участники
Зарегистрирован: 23.07.2012(UTC) Сообщений: 8
|
Здравствуйте. Есть необходимость подписывать данные на стороне клиента (под Windows), затем хранение этих документов (обычный текст) на сервере, который под linux (будет FreeBSD x64). В целях протестировать работу, был создан тестовый сертификат. Скопипастен код из примеров под винду. Приложение sign и verify отлично подписывают и проверяют сообщение. Сертификат помещается в сообщение. А вот на линуксе возникли с этим проблемы. Если брать сообщение и подписывать его под виндой, потом этот же файл (который содержит сертификат) проверять под линуксом, то выдается ошибка CADES_VERIFY_NO_CHAIN при вызове CadesVerifyMessage. Код проверки. Код: CRYPT_VERIFY_MESSAGE_PARA cryptVerifyPara;
memset( &cryptVerifyPara, 0, sizeof( CRYPT_VERIFY_MESSAGE_PARA ) );
cryptVerifyPara.cbSize = sizeof( CRYPT_VERIFY_MESSAGE_PARA );
cryptVerifyPara.dwMsgAndCertEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
CADES_VERIFICATION_PARA cadesVerifyPara;
memset( &cadesVerifyPara, 0, sizeof( CADES_VERIFICATION_PARA ) );
cadesVerifyPara.dwSize = sizeof( CADES_VERIFICATION_PARA );
cadesVerifyPara.dwCadesType = CADES_BES;
CADES_VERIFY_MESSAGE_PARA verifyPara;
memset( &verifyPara, 0, sizeof( CADES_VERIFY_MESSAGE_PARA ) );
verifyPara.dwSize = sizeof( CADES_VERIFY_MESSAGE_PARA );
verifyPara.pVerifyMessagePara = &cryptVerifyPara;
verifyPara.pCadesVerifyPara = &cadesVerifyPara;
PCADES_VERIFICATION_INFO pVerifyInfo = 0;
PCRYPT_DATA_BLOB pContent = 0;
if( !CadesVerifyMessage( &verifyPara, 0, &message[ 0 ],( DWORD ) message.size( ), &pContent, &pVerifyInfo ) ) {
std::cout << "CadesVerifyMessage() failed" << std::endl;
std::cout << "status=" << GetVerifyStatusInfo( pVerifyInfo->dwStatus ).c_str( ) << std::endl;
PrintLastError( );
CadesFreeVerificationInfo(pVerifyInfo);
return;
}
Собственно странность в том, что если проверять тот же файлик через командную строку: cryptcp -verify message.utf8.signed.txtто спрашивает "Один из сертификатов в цепочке не имеет доверенного корневого ЦС", собственно ответ да (тестируем же). Правда, исходное сообщение дополняется каким-то не рисуемым символом (gedit злобно ругается). А что такого надо сделать в коде? Корневой сертификат установлен, CRL установлен. Не пойму что еще ему надо. Путь до libcurl правильный, иначе бы создания запросов на сертификат не работали. В данный момент тестируется на Windows XP SP3 x86, Ubuntu 10.04 LTSUPDATEНа заметку, оказывается функция CryptVerifyMessageSignature выдает количество байт на 1 больше чем надо (из-за этого видимо из командной строки лишний символ). Если просмотреть коды байтов в результате, то понятно, что последний байт это EOF (конец файла). Отредактировано пользователем 24 июля 2012 г. 11:07:05(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 25.01.2011(UTC) Сообщений: 589 Откуда: Крипто-Про
|
Где сертификат получали? Вывод certmgr -list -store root ?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 23.07.2012(UTC) Сообщений: 8
|
rozhkov написал:Где сертификат получали? Вывод certmgr -list -store root ? Тестовый сертификат. Брался тут http://www.cryptopro.ru/certsrv/Код:Certmgr 0.9 prerelease (c) "CryptoPro", 2007-2010.
program for managing certificate(CRL) and stores
=============================================================================
1-------
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO
Subject : CN=Malyshev Alexander, E=malyshev_ap@a11.ru
Serial : 0x9D110200020070CB821F
PrivateKey Link: Yes. Container: HDIMAGE\\My.000\ED72
=============================================================================
[ErrorCode: 0x00000000]
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 25.01.2011(UTC) Сообщений: 589 Откуда: Крипто-Про
|
У Вас в хранилище root установлен личный сертификат или Вы вывод личного хранилища все-таки выложили?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 23.07.2012(UTC) Сообщений: 8
|
rozhkov написал:У Вас в хранилище root установлен личный сертификат или Вы вывод личного хранилища все-таки выложили? Да, личный туда ставился. А вот корневой где взять? Экспорт из винды не помог (не ставится).
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 25.01.2011(UTC) Сообщений: 589 Откуда: Крипто-Про
|
Корневой на тестовом УЦ можете скачать, установить ./certmgr -inst -store root -file путь_к_файлу
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 23.07.2012(UTC) Сообщений: 8
|
Да, спасибо, помогло. CadesVerifyMessage заработал. Но баг с командной строкой все таки стоит поправить. Отредактировано пользователем 27 июля 2012 г. 7:25:46(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 23.07.2012(UTC) Сообщений: 8
|
Обнаружилась проблема под FreeBSD 9 x64Вызов функции CadesVerifyMessage вешает приложение. После ее вызова приложение в астрале. Через командную строку работает. CryptVerifyMessageSignature тоже виснет. И при вызове certmgr, команда выполняется, но в конце постоянно вылазит сообщение содержащее: capi20: !CryptMsgUpdate!() Exception Invalid cryptographic message type at file ... CMSMessage.cpp Отредактировано пользователем 27 июля 2012 г. 11:47:18(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Цитата:На заметку, оказывается функция CryptVerifyMessageSignature выдает количество байт на 1 больше чем надо (из-за этого видимо из командной строки лишний символ). А длину смотрели по первому или второму вызову функции? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 23.07.2012(UTC) Сообщений: 8
|
cross написал:Цитата:На заметку, оказывается функция CryptVerifyMessageSignature выдает количество байт на 1 больше чем надо (из-за этого видимо из командной строки лишний символ). А длину смотрели по первому или второму вызову функции? Да. Длина на 1 байт больше чем надо (последний байт 255 = (BYTE) -1). После второго остается такой же. А вообще, вопрос думаю устарел, ибо форум у вас мертвый. Пытался сделать php extension, который успешно работает под другими ОС, кроме фряхи. На вызове Sign или Verify происходит зависание приложения. Механику выяснить не удалось. Отредактировано пользователем 5 сентября 2012 г. 12:42:16(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close