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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline avrik  
#1 Оставлено : 13 марта 2015 г. 13:37:59(UTC)
avrik

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

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

Сказал(а) «Спасибо»: 4 раз
Добрый день!
Стоит задача получить открепленную подпись (PKCS#7).
С помощью примера CryptMsgSign я понял как получить значение подписи. Но не понял как должен выглядеть .sig файл, какая структура должна быть у файла?
Нужно просто достать сертификат и рядом с подписью его в файл положить? Или как-то по другому? Искал информацию в гугле, не нашел даже примеров .sig или .p7b файлов.

На всякий случай - листинг программы: http://paste.ubuntu.com/10590147/
И вывод в консоль: http://paste.ubuntu.com/10590157/

Отредактировано пользователем 13 марта 2015 г. 13:38:48(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 13 марта 2015 г. 13:49:14(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Array of pointers to CERT_CONTEXT structures to be included in the signed message. If the pSigningCert is to be included, a pointer to it must be in the rgpMsgCert array.

Отредактировано пользователем 13 марта 2015 г. 13:50:22(UTC)  | Причина: https://msdn.microsoft.com/ru-RU/library/windows/desktop/aa381468(v=vs.85).aspx

Знания в базе знаний, поддержка в техподдержке
Offline avrik  
#3 Оставлено : 13 марта 2015 г. 14:19:53(UTC)
avrik

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
Array of pointers to CERT_CONTEXT structures to be included in the signed message. If the pSigningCert is to be included, a pointer to it must be in the rgpMsgCert array.


А можно более развернутый ответ получить? =)
Где нужно использовать структуру CRYPT_SIGN_MESSAGE_PARA?
Я попробовал положить массив с сертификатами в структуру CMSG_SIGNED_ENCODE_INFO, но получил опять же только подпись.
Offline Максим Коллегин  
#4 Оставлено : 13 марта 2015 г. 15:08:49(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Знания в базе знаний, поддержка в техподдержке
Offline avrik  
#5 Оставлено : 16 марта 2015 г. 12:00:03(UTC)
avrik

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

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

Сказал(а) «Спасибо»: 4 раз
Добрый день!

При вызове функции CryptSignMessage() получил следующую ошибку:
capi20: 0x355e09dc: :218 CryptAcquireCertificatePrivateKey () CertGetCertificateContextProperty(CERT_KEY_PROV_INFO_PROP_ID) failed!

В документации было сказано Either the CERT_KEY_PROV_INFO_PROP_ID, or CERT_KEY_CONTEXT_PROP_ID property must be set for the context to provide access to the private signature key.

Заполнил структуру CERT_KEY_CONTEXT. С помощью CertSetCertificateContextProperty() установил это свойство.

В итоге вышло получить подпись, но сайт госуслуг говорит, что она невалидна.
https://www.dropbox.com/...3-16%2014.56.49.png?dl=0

Использовал для проверки эту форму - https://www.gosuslugi.ru/pgu/eds/. Пункт "Электронного документа. ЭП — отсоединенная, в формате PKCS#7".

Листинг программы: http://paste.ubuntu.com/10608665/
Offline avrik  
#6 Оставлено : 16 марта 2015 г. 12:23:59(UTC)
avrik

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

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

Сказал(а) «Спасибо»: 4 раз
В общем, как обычно бывает, сначала спросишь, через 5 минут сам решение найдешь.

cbMessage = (strlen((TCHAR*) pbMessage) + 1) * sizeof(TCHAR);
Убрал +1, подпись теперь валидна.

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