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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Flame_xXx  
#1 Оставлено : 12 августа 2009 г. 19:12:46(UTC)
Flame_xXx

Статус: Активный участник

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

Доброго времени суток! Не могли бы Вы обьяснить как работает CryptVerifyDetachedMessageSignature с нулевыми параметрами, когда вызывается CryptGetSignerCertificateCallback Function? Я подписываю сообщение, пытаюсь проверить его на этой же машине тем же самым сертификатом и получаю ошибку 0x80092004 Объект или свойство не найдено. Сертификат лежит в MY. Ключи в реестре.

вот код проверки:

Код:
	CRYPT_VERIFY_MESSAGE_PARA VerifyPara;
	ZeroMemory(&VerifyPara, sizeof(VerifyPara));

	VerifyPara.cbSize = sizeof(VerifyPara);
	VerifyPara.dwMsgAndCertEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
	VerifyPara.hCryptProv = NULL;
	VerifyPara.pfnGetSignerCertificate = NULL;
	HRESULT hr;
	if(m_bDetachedSignature)
	{
		const BYTE* DataArray[] = { pDataIn };
		DWORD SizeArray[] = { dwDataSize };
                        //тут валится
		hr = CheckError(::CryptVerifyDetachedMessageSignature(&VerifyPara, dwSignerIndex, pDataSign, dwSignSize, 1, DataArray, SizeArray,NULL));
	}
	else
	{
		if(!pBuffSize)
			hr = CheckError(::CryptVerifyMessageSignature(&VerifyPara, dwSignerIndex, pDataSign, dwSignSize, NULL, NULL, ppSignerCert));
		else
		{
			if(!::CryptVerifyMessageSignature(&VerifyPara, dwSignerIndex, pDataSign, dwSignSize, NULL, pBuffSize, ppSignerCert))
				hr = CheckError(FALSE);

			*ppOutData = new BYTE[*pBuffSize];

			if(!::CryptVerifyMessageSignature(&VerifyPara, dwSignerIndex, pDataSign, dwSignSize, *ppOutData, pBuffSize, ppSignerCert))
			{
				delete[] *ppOutData;
				*ppOutData = NULL;
				hr = CheckError(FALSE);
			}
		}
	}

А-то что то я msdn читал, не очень разобрался прямо скажем..

Отредактировано пользователем 12 августа 2009 г. 19:24:24(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#2 Оставлено : 12 августа 2009 г. 20:14:15(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
MSDN:
Цитата:
The default callback tries to get the signer certificate context from the message's certificate store.

Чтобы она работала добавляйте сертификат подписчика в сообщение.
А ключи для проверки подписи вообще не нужны.
Техническую поддержку оказываем тут
Наша база знаний
Offline Flame_xXx  
#3 Оставлено : 13 августа 2009 г. 14:27:23(UTC)
Flame_xXx

Статус: Активный участник

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

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