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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline undeadcs  
#1 Оставлено : 23 июля 2012 г. 13:13:40(UTC)
undeadcs

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

Группы: Участники
Зарегистрирован: 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 LTS

UPDATE
На заметку, оказывается функция CryptVerifyMessageSignature выдает количество байт на 1 больше чем надо (из-за этого видимо из командной строки лишний символ).
Если просмотреть коды байтов в результате, то понятно, что последний байт это EOF (конец файла).

Отредактировано пользователем 24 июля 2012 г. 11:07:05(UTC)  | Причина: Не указана

Offline rozhkov  
#2 Оставлено : 24 июля 2012 г. 19:08:28(UTC)
rozhkov

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

Группы: Участники
Зарегистрирован: 25.01.2011(UTC)
Сообщений: 589
Откуда: Крипто-Про

Где сертификат получали?
Вывод certmgr -list -store root ?
Offline undeadcs  
#3 Оставлено : 25 июля 2012 г. 7:08:02(UTC)
undeadcs

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

Группы: Участники
Зарегистрирован: 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]
Offline rozhkov  
#4 Оставлено : 25 июля 2012 г. 11:53:26(UTC)
rozhkov

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

Группы: Участники
Зарегистрирован: 25.01.2011(UTC)
Сообщений: 589
Откуда: Крипто-Про

У Вас в хранилище root установлен личный сертификат или Вы вывод личного хранилища все-таки выложили?
Offline undeadcs  
#5 Оставлено : 25 июля 2012 г. 12:16:12(UTC)
undeadcs

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

Группы: Участники
Зарегистрирован: 23.07.2012(UTC)
Сообщений: 8

rozhkov написал:
У Вас в хранилище root установлен личный сертификат или Вы вывод личного хранилища все-таки выложили?


Да, личный туда ставился.
А вот корневой где взять?
Экспорт из винды не помог (не ставится).
Offline rozhkov  
#6 Оставлено : 25 июля 2012 г. 18:21:11(UTC)
rozhkov

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

Группы: Участники
Зарегистрирован: 25.01.2011(UTC)
Сообщений: 589
Откуда: Крипто-Про

Корневой на тестовом УЦ можете скачать, установить ./certmgr -inst -store root -file путь_к_файлу
Offline undeadcs  
#7 Оставлено : 26 июля 2012 г. 6:27:09(UTC)
undeadcs

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

Группы: Участники
Зарегистрирован: 23.07.2012(UTC)
Сообщений: 8

Да, спасибо, помогло.
CadesVerifyMessage заработал.
Но баг с командной строкой все таки стоит поправить.

Отредактировано пользователем 27 июля 2012 г. 7:25:46(UTC)  | Причина: Не указана

Offline undeadcs  
#8 Оставлено : 27 июля 2012 г. 7:27:10(UTC)
undeadcs

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline cross  
#9 Оставлено : 24 августа 2012 г. 22:55:13(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Цитата:
На заметку, оказывается функция CryptVerifyMessageSignature выдает количество байт на 1 больше чем надо (из-за этого видимо из командной строки лишний символ).

А длину смотрели по первому или второму вызову функции?
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline undeadcs  
#10 Оставлено : 5 сентября 2012 г. 12:41:26(UTC)
undeadcs

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

Группы: Участники
Зарегистрирован: 23.07.2012(UTC)
Сообщений: 8

cross написал:
Цитата:
На заметку, оказывается функция CryptVerifyMessageSignature выдает количество байт на 1 больше чем надо (из-за этого видимо из командной строки лишний символ).

А длину смотрели по первому или второму вызову функции?


Да. Длина на 1 байт больше чем надо (последний байт 255 = (BYTE) -1).
После второго остается такой же.

А вообще, вопрос думаю устарел, ибо форум у вас мертвый.
Пытался сделать php extension, который успешно работает под другими ОС, кроме фряхи.
На вызове Sign или Verify происходит зависание приложения.
Механику выяснить не удалось.

Отредактировано пользователем 5 сентября 2012 г. 12:42:16(UTC)  | Причина: Не указана

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