Статус: Новичок
Группы: Участники
Зарегистрирован: 07.07.2010(UTC) Сообщений: 3 Откуда: Spb
|
Возникла такая проблема, при создании ЭЦП на этапе отправки CadesSignMessage выдаёт ошибку. Пример взят из стандартной документации КриптоПро по ЭЦП. Подскажите пожалуйста, что я забыл или чего не сделал. Заранее спасибо! Вот собственно код: Код:
#define empty 0;
#define CRYPT_SUCCESS 0;
#define CERT_STORE_NAME L"MY"
#define SIGNER_NAME L"DigiCert Global Root CA"
PCCERT_CONTEXT pSignerCert;
using namespace System;
using namespace System::Runtime::InteropServices;
int main()
{
HCERTSTORE hStoreHandle;
// Open a certificate store.
if ( !( hStoreHandle = CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0,
NULL,
CERT_SYSTEM_STORE_CURRENT_USER,
CERT_STORE_NAME)))
{
Console::Write("The MY store could not be opened.");
}
if(pSignerCert = CertFindCertificateInStore(
hStoreHandle,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
0,
CERT_FIND_SUBJECT_STR,
SIGNER_NAME,
NULL))
{
Console::Write("The signer's certificate was found.\n");
}
else
{
Console::Write( "Signer certificate not found.");
}
CRYPT_SIGN_MESSAGE_PARA signPara = { sizeof(signPara) };
signPara.dwMsgEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
signPara.pSigningCert = pSignerCert;//pContext; // 0 for window
signPara.HashAlgorithm.pszObjId = (LPSTR)CertAlgIdToOID(CALG_MD5);//szOID_RSA_RSA;
signPara.cMsgCert = 1;
signPara.rgpMsgCert = &pSignerCert;
CADES_SIGN_MESSAGE_PARA para = { sizeof(para) };
para.pSignMessagePara = &signPara;
char data[] = "Test";
const BYTE* pbToBeSigned[] = { (BYTE*)data };
DWORD cbToBeSigned[] = { strlen(data) };
PCRYPT_DATA_BLOB pSignedMessage = 0;
if(!CadesSignMessage(¶,false,1,pbToBeSigned,cbToBeSigned,
&pSignedMessage))
{
std::cout << "CadesSignMessage() failed" << std::endl;
std::getchar();
return empty;
}
if(!CadesFreeBlob(pSignedMessage))
{
std::cout << "CadesFreeBlob() failed" << std::endl;
std::getchar();
return empty;
}
std::getchar();
return CRYPT_SUCCESS;
}
Отредактировано пользователем 7 июля 2010 г. 20:02:11(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
При таком способе создания подписи не заполняется поле pCadesSignPara структуры CADES_SIGN_MESSAGE_PARA. В этом случае используются значения членов CADES_SIGN_PARA по умолчанию. В частности, будет создаваться подпись типа CAdES-X Long Type 1, в процессе формирования которой необходимо получить штампы времени. А для этого необходим адрес службы штампов времени, который можно задать: - В настройках групповой политики - В структуре CADES_SIGN_PARA (поле pTspConnectionPara) Либо можно создавать "простейшую" ЭЦП формата CAdES BES, для формирования которой не используются штампы времени. В этом случае следует задать значение поля dwCadesType структуры CADES_SIGN_PARA равным CADES_BES.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.07.2010(UTC) Сообщений: 3 Откуда: Spb
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.07.2010(UTC) Сообщений: 3 Откуда: Spb
|
У меня ещё один вопрос. Я создал ЭЦП и теперь мне нужно с помощью неё подписать документ. Как это сделать? Нашёл вот такое решение: Для создания электронной цифровой подписи необходимо вычислить хеш заданного файла и зашифровать этот "цифровой отпечаток сообщения" своим закрытым ключом - "подписать". На сколько это правильно и есть ли другие решения проблемы?
Прошу прощения за может быть дурацкие вопросы, только начинаю знакомство с ЭЦП
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
Здравствуйте!
Вы уже создали электронную цифровую подпись (ЭЦП).
Что Вы понимаете под словами "подписать с помощью нее документ"?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.09.2010(UTC) Сообщений: 5 Откуда: Armenia Yerevan
|
Exs42 написал:Возникла такая проблема, при создании ЭЦП на этапе отправки CadesSignMessage выдаёт ошибку. Пример взят из стандартной документации КриптоПро по ЭЦП. Подскажите пожалуйста, что я забыл или чего не сделал. Заранее спасибо!
in which programing language wrote this example, c# or c++? I try compile this code in visual studio c ++ 6.0 get followin errors 'PCCERT_CONTEXT' : missing storage-class or type specifiers
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close