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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline NeoEvgeny  
#1 Оставлено : 25 ноября 2022 г. 18:07:41(UTC)
NeoEvgeny

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

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

Сказал(а) «Спасибо»: 5 раз
Всем, Здравствуйте!
Делаю отсоединенную подпись:
Код:
[h]
    // Открываем хранилище "Личное" сертификатов
    if (!( hCertStore = CertOpenSystemStore(NULL, TEXT("MY"))))
        MyHandleError("Store not opened.");
    // Поиск по отпечатку
    if(!(сontext = GetRecipientCert4Thumbprint(hCertStore, _tumbPrint)))
    {
        CertCloseStore(hCertStore, 0);
        MyHandleError("Cert not find.");
    }

    // Задаем параметры
    CRYPT_SIGN_MESSAGE_PARA signPara = { sizeof(signPara) };
    signPara.dwMsgEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
    signPara.pSigningCert = context;
    signPara.HashAlgorithm.pszObjId = (LPSTR) szOID_CP_GOST_R3411_12_256;

    CADES_SIGN_PARA cadesSignPara = { sizeof(cadesSignPara) };
    cadesSignPara.dwCadesType = CADES_BES; // Указываем тип усовершенствованной подписи CADES_BES

    CADES_SIGN_MESSAGE_PARA para = { sizeof(para) };
    para.pSignMessagePara = &signPara;
    para.pCadesSignPara = &cadesSignPara;

    // Формируем данные для подписания
    vector<unsigned char> data;
    ReadFileToVector(_filenameSrc, data);
    const unsigned char *pbToBeSigned[] = { &data[0] };
    DWORD cbToBeSigned[] = { (DWORD)data.size() };

    PCRYPT_DATA_BLOB pSignedMessage = 0;
    // Создаем подпись
    if (!CadesSignMessage(&para, TRUE, 0, pbToBeSigned, cbToBeSigned, &pSignedMessage))
    {
        cout << "CadesSignMessage() failed" << endl;
        return -1;
    }

    vector<unsigned char> message(pSignedMessage->cbData);
    copy(pSignedMessage->pbData, pSignedMessage->pbData + pSignedMessage->cbData, message.begin());

    // Сохраняем результат в файл
    if (SaveVectorToFile<unsigned char>(_filenameDst, message))
    {
        cout << "Signature was not saved" << endl;
        return -1;
    }

    cout << "Signature was saved successfully" << endl;

    // Освобождаем структуру с закодированным подписанным сообщением
    if (!CadesFreeBlob(pSignedMessage))
    {
        cout << "CadesFreeBlob() failed" << endl;
        return -1;
    }
[/h][/h][/h]

Получаю файл с подписью, но подпись не проходит проверку cptools КриптоПро:
Цитата:
Подпись 1/1: ошибка при проверке (0x80091007: Неправильное значение хеша.)

Подскажите, каких параметров не хватает для правильной отсоединенной подписи?
UPD.xml (6kb) загружен 5 раз(а). detach_sign.p7s (1kb) загружен 3 раз(а).

Отредактировано пользователем 25 ноября 2022 г. 18:08:29(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 25 ноября 2022 г. 22:11:06(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,079
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2374 раз в 1867 постах
Здравствуйте.

1. Хеш xml и в атрибутах - совпадают. Должно успешно проверяться
2. Вы не указали в структуре опцию, чтобы вкладывался сертификат подписанта (можете приложить его, в архиве, .cer?)
3. В cptools проверяли подпись - как отсоединенную?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Русев  
#3 Оставлено : 28 ноября 2022 г. 12:33:24(UTC)
Русев Андрей

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

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,578

Сказал(а) «Спасибо»: 47 раз
Поблагодарили: 663 раз в 458 постах
Здравствуйте.
cptools самостоятельно детектирует attached/detached подписи. Но имя файла с подписью должно быть таким "имя_исходного_Файла_с_расширением.p7s". В вашем сообщении прикреплены файлы с неподходящими именами. Может дело лишь в путанице?
На всякий случай добавлю, что вы формируете cades-bes сообщение - для этого не требуется использовать CadesSignMessage - ровно такой же результат даст CryptSignMessage - и ваше приложение не будет требовать наличия cades-библиотек для работы.
Официальная техподдержка. Официальная база знаний.
thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
NeoEvgeny оставлено 28.11.2022(UTC)
Offline NeoEvgeny  
#4 Оставлено : 28 ноября 2022 г. 18:05:05(UTC)
NeoEvgeny

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: Андрей Русев Перейти к цитате
Здравствуйте.
cptools самостоятельно детектирует attached/detached подписи. Но имя файла с подписью должно быть таким "имя_исходного_Файла_с_расширением.p7s". В вашем сообщении прикреплены файлы с неподходящими именами. Может дело лишь в путанице?
На всякий случай добавлю, что вы формируете cades-bes сообщение - для этого не требуется использовать CadesSignMessage - ровно такой же результат даст CryptSignMessage - и ваше приложение не будет требовать наличия cades-библиотек для работы.


Спасибо, действительно формат должен быть - "имя_исходного_Файла_с_расширением.p7s". Подскажите в каких случаях нужно использовать CadesSignMessage?

Offline NeoEvgeny  
#5 Оставлено : 28 ноября 2022 г. 18:14:06(UTC)
NeoEvgeny

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: Андрей * Перейти к цитате
Здравствуйте.

1. Хеш xml и в атрибутах - совпадают. Должно успешно проверяться
2. Вы не указали в структуре опцию, чтобы вкладывался сертификат подписанта (можете приложить его, в архиве, .cer?)
3. В cptools проверяли подпись - как отсоединенную?


По 2 пункту - сертификат нужно всегда прикладывать? Напишите когда надо/не надо его указывать?
По 3 пункту - проверял как отсоединённую, дело оказалось в формате имен файла с подписью.
Offline Андрей *  
#6 Оставлено : 28 ноября 2022 г. 19:21:18(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,079
Мужчина
Российская Федерация

Сказал «Спасибо»: 612 раз
Поблагодарили: 2374 раз в 1867 постах
Автор: NeoEvgeny Перейти к цитате
Автор: Андрей * Перейти к цитате
Здравствуйте.

1. Хеш xml и в атрибутах - совпадают. Должно успешно проверяться
2. Вы не указали в структуре опцию, чтобы вкладывался сертификат подписанта (можете приложить его, в архиве, .cer?)
3. В cptools проверяли подпись - как отсоединенную?


По 2 пункту - сертификат нужно всегда прикладывать? Напишите когда надо/не надо его указывать?
По 3 пункту - проверял как отсоединённую, дело оказалось в формате имен файла с подписью.


редко встречал, когда не нужно(специфические ИС, экономия на х кб).

Здесь же - явно требуется, ФНС, обмен УПД между ОЭДО
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
NeoEvgeny оставлено 29.11.2022(UTC)
Offline Андрей Русев  
#7 Оставлено : 2 декабря 2022 г. 0:40:54(UTC)
Русев Андрей

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

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,578

Сказал(а) «Спасибо»: 47 раз
Поблагодарили: 663 раз в 458 постах
Автор: NeoEvgeny Перейти к цитате
Подскажите в каких случаях нужно использовать CadesSignMessage?

Когда хотите сделать cades-t или xlong type-1.

Официальная техподдержка. Официальная база знаний.
thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
NeoEvgeny оставлено 02.12.2022(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.