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

Уведомление

Icon
Error

3 Страницы<123
Опции
К последнему сообщению К первому непрочитанному
Offline forik  
#21 Оставлено : 27 февраля 2012 г. 17:29:22(UTC)
forik

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

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

Сказал(а) «Спасибо»: 2 раз
Андрей * написал:
Test Center CRYPTO-PRO - отсутствует в списке доверенных сертификатов на сервере (notary.criptopro.ru)

Тогда потом надо будет потестить с настоящим сертификатом. Но вот верифицировать ни в какую не получается:

Код:
char *fileContent;
	ifstream file("c:\\users\\timur\\desktop\\numonly.txt", ios::in | ios::binary | ios::ate);
	ifstream::pos_type size1 = file.tellg();
	fileContent = new char[size1];
	file.seekg(0, ios::beg);
	file.read(fileContent, size1);
	file.close();
	fileContent[size1] = '\0';

	BYTE *pbMessage = (BYTE*)fileContent;
	DWORD cbMessage = (DWORD)size1;
	const BYTE* MessageArray[] = {pbMessage};
	DWORD MessageSizeArray[1];
	MessageSizeArray[0] = cbMessage;

	//SignMessage(cbMessage, pbMessage);
	char *signContent;
	ifstream sign("c:\\users\\timur\\desktop\\sign_pkcs7.sig", ios::in | ios::binary | ios::ate);
	ifstream::pos_type size = sign.tellg();
	signContent = new char[size];
	sign.seekg(0, ios::beg);
	sign.read(signContent, size);
	sign.close();
	signContent[size] = '\0';

	CRYPT_VERIFY_MESSAGE_PARA VerifyParams;
	ZeroMemory(&VerifyParams, sizeof(VerifyParams));

	VerifyParams.cbSize = sizeof(VerifyParams);
	VerifyParams.dwMsgAndCertEncodingType = MY_TYPE;
	VerifyParams.hCryptProv = 0;
	VerifyParams.pfnGetSignerCertificate = NULL;
	VerifyParams.pvGetArg = NULL;

	if(CryptVerifyDetachedMessageSignature(
		&VerifyParams,
		0,
		(BYTE *)signContent,
		size,
		1,
		MessageArray,
		MessageSizeArray,
		NULL
		))
	{
		printf("Message verified. \n");
	}
	else
	{
		printf("CryptVerifyDetachedMessageSignature error %d.\n", GetLastError());
		exit(1);
	}

Выдает ошибку -2147024809, т.е. какой-то параметр неверный получается.. В ЭЦП включил сертификат пользователя и доверенного корневого центра, плюс еще CRL.

Отредактировано пользователем 28 февраля 2012 г. 17:28:40(UTC)  | Причина: Не указана

Вложение(я):
sign_pkcs7.sig (3kb) загружен 7 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline forik  
#22 Оставлено : 28 февраля 2012 г. 17:35:28(UTC)
forik

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

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

Сказал(а) «Спасибо»: 2 раз
Вытащил сертификат из pkcs файла, проверка все равно не проходит, как так то?
Код:

	char *signContent;
	ifstream sign("c:\\users\\timur\\desktop\\sign_pkcs7.sig", ios::in | ios::binary | ios::ate);
	ifstream::pos_type size = sign.tellg();
	signContent = new char[(int)size + 1];
	sign.seekg(0, ios::beg);
	sign.read(signContent, size);
	sign.close();
	signContent[size] = '\0';

	HCRYPTMSG hMsg;
	if(!(hMsg = CryptMsgOpenToDecode(
					MY_TYPE,
					0,
					0,
					NULL,
					NULL,
					NULL)))
	{
		printf("WTF!!!!!!!!! %d\n", GetLastError());
	}

	BYTE *pbDecoded;
	DWORD cbDecoded;
	DWORD cbSignerCertInfo;
	PCERT_INFO pSignerCertInfo;
	PCCERT_CONTEXT pSignerCertContext;

	if(!CryptMsgUpdate(
		hMsg,
		(BYTE *)signContent,
		size,
		TRUE))
	{
		printf("WTF!!!!!!!! %d\n", GetLastError());
	}
	
	if(!CryptMsgGetParam(
		hMsg,
		CMSG_CONTENT_PARAM,
		0,
		NULL,
		&cbDecoded))
	{
		printf("WTF!!!!!! %d\n", GetLastError());
	}

	pbDecoded = new BYTE[cbDecoded];
	if(!CryptMsgGetParam(
		hMsg,
		CMSG_CONTENT_PARAM,
		0,
		pbDecoded,
		&cbDecoded))
	{
		printf("WTF!!!!!! %d\n", GetLastError());
	}

	if(!CryptMsgGetParam(
		hMsg,
		CMSG_SIGNER_CERT_INFO_PARAM,
		0,
		NULL,
		&cbSignerCertInfo))
	{
		printf("WTF!!!!!! %d\n", GetLastError());
	}

	pSignerCertInfo = (PCERT_INFO)malloc(cbSignerCertInfo);
	if(!CryptMsgGetParam(
		hMsg,
		CMSG_SIGNER_CERT_INFO_PARAM,
		0,
		pSignerCertInfo,
		&cbSignerCertInfo))
	{
		printf("WTF!!!!!! %d\n", GetLastError());
	}

	if(!(hStoreHandle = CertOpenStore(
						CERT_STORE_PROV_MSG,
						MY_TYPE,
						NULL,
						0,
						hMsg)))
	{
		printf("WTF!!!!!! %d\n", GetLastError());
	}

	if(!(pSignerCertContext = CertGetSubjectCertificateFromStore(
								hStoreHandle,
								MY_TYPE,
								pSignerCertInfo)))
	{
		printf("WTF!!!!!! %d\n", GetLastError());
	}

	LPWSTR pszName = (LPWSTR)malloc(256);
	if(!CertGetNameString(
		pSignerCertContext,
		CERT_NAME_SIMPLE_DISPLAY_TYPE,
		0,
		NULL,
		pszName,
		256))
	{
		printf("WTF!!!!!! %d\n", GetLastError());
		ReportFailure();
	}
	printf("signer %s\n", pszName);

	CRYPT_VERIFY_MESSAGE_PARA VerifyParams;
	ZeroMemory(&VerifyParams, sizeof(VerifyParams));

	VerifyParams.cbSize = sizeof(VerifyParams);
	VerifyParams.dwMsgAndCertEncodingType = MY_TYPE;
	VerifyParams.hCryptProv = 0;
	VerifyParams.pfnGetSignerCertificate = NULL;
	VerifyParams.pvGetArg = NULL;

	if(CryptVerifyDetachedMessageSignature(
		&VerifyParams,
		0,
		(BYTE *)signContent,
		size,
		1,
		MessageArray,
		MessageSizeArray,
		&pSignerCertContext
		))
	{
		printf("Message verified. \n");
	}
	else
	{
		printf("CryptVerifyDetachedMessageSignature error %d.\n", GetLastError());
		exit(1);
	}

При вызове CryptVerifyDetachedMessageSignature Ошибка -2147024809 - Incorect parameter ((.

Отредактировано пользователем 28 февраля 2012 г. 19:12:50(UTC)  | Причина: Не указана

Offline forik  
#23 Оставлено : 2 марта 2012 г. 14:41:03(UTC)
forik

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

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

Сказал(а) «Спасибо»: 2 раз
Проблему решил, в структуре Crypt_verify_message_para и CryptMsgOpenToDecode указать ссылку на криптопровайдер.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы<123
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.