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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Тонишев  
#1 Оставлено : 6 июня 2018 г. 2:04:46(UTC)
Евгений Тонишев

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день!
Пожалуйста, подскажите, как с помощью CryptoAPI можно добавить метку времени при подписи сообщения? Подписываю сообщение таким образом
Код:
signParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
signParams.dwMsgEncodingType = PKCS_7_ASN_ENCODING | X509_ASN_ENCODING;
signParams.pSigningCert = this->pSignCert;
signParams.HashAlgorithm.pszObjId = (LPSTR)szOID_CP_GOST_R3411;
signParams.HashAlgorithm.Parameters.cbData = NULL;
signParams.cMsgCert = 0;
signParams.rgpMsgCert = NULL;
signParams.cAuthAttr = 0;
signParams.rgAuthAttr = NULL;
signParams.dwInnerContentType = 0;
signParams.cMsgCrl = 0;
signParams.cUnauthAttr = 0;
signParams.dwFlags = 0;
signParams.pvHashAuxInfo = NULL;

BYTE* pbSignedMsgBlob;
DWORD cbSignedMsgBlob;

const BYTE* msgsArray[] = { (unsigned char*)msg.c_str() };
DWORD msgsSizeArray[1] = { msg.length() + 1 };

	
if (!CryptSignMessage(&signParams, !withData, 1, msgsArray, 
		msgsSizeArray, NULL, &cbSignedMsgBlob)) {

	//throw CGRSignMessage("");

}

//Выделение места для буфера
if (!(pbSignedMsgBlob = new BYTE[cbSignedMsgBlob])) {

	//throw CGRSignMessage("");

}

//Формирование подписи
if (!CryptSignMessage(&signParams, FALSE, 1, msgsArray, 
		msgsSizeArray, pbSignedMsgBlob, &cbSignedMsgBlob)) {

	//throw CGRSignMessage("");

}

return byte2base64(pbSignedMsgBlob, cbSignedMsgBlob);

После подписи я могу расшифровать строку с помощью КриптоАРМ, все верно расшифровывается. Но при отправке на сервер для авторизации, сервер всегда присылает ответ "ЭП просрочена". Что делать?
Offline Евгений Тонишев  
#2 Оставлено : 6 июня 2018 г. 17:40:23(UTC)
Евгений Тонишев

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

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

Сказал(а) «Спасибо»: 1 раз
Проблема заключалась в том, что я не отправлял серверу сертификат вместе с подписанными данными, поэтому сервер не мог расшифровать моё сообщение. Изменив
Код:
signParams.cMsgCert = 0;
signParams.rgpMsgCert = NULL;

на
Код:
signParams.cMsgCert = 1;
signParams.rgpMsgCert = &this->pSignCert;
сервер дал нужный мне ответ.
При этом я узнал, что средствами CryptoAPI трудновато добавить метку времени в сообщение, поэтому я рекомендую сразу пользоваться средствами КриптоПРО SDK и использовать функцию CadesSignMessage.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.