Статус: Участник
Группы: Участники
Зарегистрирован: 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);
После подписи я могу расшифровать строку с помощью КриптоАРМ, все верно расшифровывается. Но при отправке на сервер для авторизации, сервер всегда присылает ответ "ЭП просрочена". Что делать?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.06.2018(UTC) Сообщений: 10 Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 1 раз
|
Проблема заключалась в том, что я не отправлял серверу сертификат вместе с подписанными данными, поэтому сервер не мог расшифровать моё сообщение. Изменив Код:signParams.cMsgCert = 0;
signParams.rgpMsgCert = NULL;
на Код:signParams.cMsgCert = 1;
signParams.rgpMsgCert = &this->pSignCert;
сервер дал нужный мне ответ. При этом я узнал, что средствами CryptoAPI трудновато добавить метку времени в сообщение, поэтому я рекомендую сразу пользоваться средствами КриптоПРО SDK и использовать функцию CadesSignMessage.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close