Статус: Участник
Группы: Участники
Зарегистрирован: 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 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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. В чем здесь проблема? выложи здесь сертификат и корневой сертификат или ссылку на файлы в РМ |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
осталось увидеть "текст кода" с CryptVerifyCertificateSignature
т.к. "сама ОС" нормально проверяет подпись под сертификатом пользователя (testkey2) по присланному сертификату VM-WINSRV2008-CA2 |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.02.2012(UTC) Сообщений: 15 Откуда: Msc
|
Да. Нужно было понять чей это открытый ключ. Забыл основы криптографии :) Спасибо. Проблема решена.
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close