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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline acoder  
#1 Оставлено : 20 февраля 2012 г. 16:20:18(UTC)
acoder

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

Группы: Участники
Зарегистрирован: 20.02.2012(UTC)
Сообщений: 15
Откуда: Msc

Добрый день.
Мне нужно проверить подпись сертификата с помощью CryptVerifyCertificateSignature. Она возвращает false. GetLastError возвращает 0x80090007 (NTE_BAD_VER Bad Version of provider.) Про CryptVerifyCertificateSignature написано что она может пробрасывать ошибки из четырех функций. Скорее всего NTE_BAD_VER выдает CryptImportKey. В чем здесь проблема?
Вложение(я):
testkey2.cer (1kb) загружен 10 раз(а).
VM-WINSRV2008-CA2.cer (1kb) загружен 11 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Андрей Писарев  
#2 Оставлено : 20 февраля 2012 г. 18:08:58(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
acoder написал:
Добрый день.
Мне нужно проверить подпись сертификата с помощью CryptVerifyCertificateSignature. Она возвращает false. GetLastError возвращает 0x80090007 (NTE_BAD_VER Bad Version of provider.) Про CryptVerifyCertificateSignature написано что она может пробрасывать ошибки из четырех функций. Скорее всего NTE_BAD_VER выдает CryptImportKey. В чем здесь проблема?


выложи здесь сертификат и корневой сертификат или ссылку на файлы в РМ
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#3 Оставлено : 20 февраля 2012 г. 19:12:43(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
и ещу выложи сертификат издателя: VM-WINSRV2008-CA

( http://WIN-RNR80913SK3/CertEnroll/WIN-RNR80913SK3_VM-WINSRV2008-CA.crt )

Цитата:

NTE_BAD_VER Bad Version of provider
...
Скорее всего NTE_BAD_VER выдает CryptImportKey. В чем здесь проблема?


кстати - алгоритм подписи у VM-WINSRV2008-CA - sha1RSA
и соответственно подписывает выпускаемые сертификаты не по ГОСТ-алгоритму

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

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#4 Оставлено : 20 февраля 2012 г. 19:49:19(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
осталось увидеть "текст кода" с CryptVerifyCertificateSignature


т.к. "сама ОС" нормально проверяет подпись под сертификатом пользователя (testkey2) по присланному сертификату VM-WINSRV2008-CA2
Техническую поддержку оказываем тут
Наша база знаний
Offline acoder  
#5 Оставлено : 20 февраля 2012 г. 20:27:48(UTC)
acoder

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

Группы: Участники
Зарегистрирован: 20.02.2012(UTC)
Сообщений: 15
Откуда: Msc

Код:

#include <windows.h>
#include <wincrypt.h>
#include <cryptdlg.h>

typedef BOOL (WINAPI *CertSelectCertificateP)(PCERT_SELECT_STRUCT_W);

void showLastError();
PCCERT_CONTEXT SelectCert(HCERTSTORE certStore);

int main(int argc, char* argv[])
{
	HCERTSTORE store = CertOpenSystemStore(0, L"my");
	PCCERT_CONTEXT pCertCtx = SelectCert(store);
	
	BOOL result = CryptVerifyCertificateSignature(NULL, PKCS_7_ASN_ENCODING, pCertCtx->pbCertEncoded, pCertCtx->cbCertEncoded, &pCertCtx->pCertInfo->SubjectPublicKeyInfo);
	
	if(!result)
		showLastError();
	else
		MessageBox(0,L"Подпись верна",0,0);
	CertFreeCertificateContext(pCertCtx);		
	CertCloseStore(store,CERT_CLOSE_STORE_FORCE_FLAG);
	return 0;
}

PCCERT_CONTEXT SelectCert(HCERTSTORE certStore)
{
	HMODULE cryptDlg = LoadLibrary(L"CryptDlg.dll");
	CertSelectCertificateP CertSelectCertificateFunc = (CertSelectCertificateP) GetProcAddress (cryptDlg,"CertSelectCertificateW");
	PCCERT_CONTEXT pSelCert = NULL;	
	CERT_SELECT_STRUCT_W cs;
	ZeroMemory(&cs,sizeof(CERT_SELECT_STRUCT_W));
	cs.dwSize = sizeof(CERT_SELECT_STRUCT_W);
	cs.szTitle = L"asd";	
	cs.cCertStore = 1;  
	cs.arrayCertStore = &certStore;
	cs.cCertContext = 1;  
	cs.arrayCertContext = &pSelCert;
	CertSelectCertificateFunc(&cs);
	FreeLibrary(cryptDlg);
	return pSelCert;
}

void showLastError()
{
	LPVOID buf;
	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 	FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buf, 0, NULL );
 
	MessageBox(0, (LPTSTR)buf ,0,MB_ICONERROR);
	LocalFree(buf);
}

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

Offline Андрей Писарев  
#6 Оставлено : 20 февраля 2012 г. 20:43:27(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Цитата:
BOOL result = CryptVerifyCertificateSignature(NULL, PKCS_7_ASN_ENCODING, pCertCtx->pbCertEncoded, pCertCtx->cbCertEncoded, &pCertCtx->pCertInfo->SubjectPublicKeyInfo);


Цитата:

pbEncoded
[in] A pointer to an encoded BLOB of CERT_SIGNED_CONTENT_INFO content on which the signature is to be verified.
cbEncoded
[in] The size, in bytes, of the encoded content in pbEncoded.
pPublicKey
[in] A pointer to a CERT_PUBLIC_KEY_INFO structure that contains the public key to use when verifying the signature.
последний параметр:
pPublicKey - открытый ключ

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

Техническую поддержку оказываем тут
Наша база знаний
Offline acoder  
#7 Оставлено : 20 февраля 2012 г. 21:08:52(UTC)
acoder

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

Группы: Участники
Зарегистрирован: 20.02.2012(UTC)
Сообщений: 15
Откуда: Msc

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