1 (2017-06-28 19:11:41 отредактировано alex3ee)

Тема: 0xE0700019, 0xE0700034 при проверке подписи

Интересуют следующие коды ошибок: 0xE0700019, 0xE0700034 при проверке подписи.
Ситуация: пользователь ставит подписи и успешно их проверяет, но при проверке этих подписей с других машин коды ошибок 0xE0700019, 0xE0700034.

stacktrace:
System. Runtime. InteropServices. COMException (0xE0700019):
 Исключение из HRESULT: 0xE0700019 
 в cpkicom.IVCERT.VerifyMem(VerifyParam pIVerifyParam, Object data, Object signjn, Objects sign_out, Objects VerifyResults)
 в MDInterop.ValidataCipf.verify_sign(Byte[] data, Byte[] sign) 
 в MDInterop.SignData3.verifySign(Byte[] content, String sign)
stacktrace:
System.Runtime.InteropServices.COMException (0xE0700034): 
 Исключение из HRESULT: 0xE0700034 
 в cpkicom.rVCERT.Initialize(String profile, Init_Flag_t flag) 
 в MDInterop.ValidataCertStore.get_instance()
 в MDInterop.ValidataCipf.verify_sign(Byte[] data, Byte[] sign) 
 в MDInterop.SignData3.verifySign(Byte[] content, String sign)

Подскажите, пожалуйста, что проверить. С чем связаны эти коды ошибок.

2

Re: 0xE0700019, 0xE0700034 при проверке подписи

[0xE0700019] Ошибка проверки ЭП
(Произошла общая ошибка проверки ЭП документа)
[0xE0700034] Ошибка проверки сертификата
(Произошла ошибка при построении или проверке цепочки сертификата)
Возможно отсутствует какой то то объект, необходимый для проверки цепочки сертификатов.  То есть, невозможно проверить сертификат на котором выполнена ЭП. Запустите, пожалуйста, "Справочник сертификатов" и в меню сервис есть пункт проверить ЭП. Проверьте ЭП с использованием справочника сертификатов.
Так же можно использовать функции:
GetErrorText - для получения текста ошибки по коду ошибки
GetErrorLine - для получения полного стека ошибки из библиотеки.

3 (2017-06-30 14:30:36 отредактировано alex3ee)

Re: 0xE0700019, 0xE0700034 при проверке подписи

Интересуют следующие коды ошибок 0xE0700003

Вывод DebugView:

00000001    0.00000000    [4724] cpcspi: Thread: file:line function text xcode(dcode) level: 0    
00000002    0.00035728    [4724] function text level: 0    
00000003    0.01510337    [4724] cpui: Thread: file:line function text xcode(dcode) level: 0    
00000004    2.12992907    [4724] 2044,70:80,0011:00000000,Open PSE pse://signed/C:\Users\MSK48979\AppData\Roaming\Validata\ccs\local.pse (w:\vd\pki_1.0.0d\crsrv\crypt\cr_vcert.c:97)    
00000005    2.13046694    [4724] 2044,70:80,0011:00000000,Open local store file://C:\Users\MSK48979\AppData\Roaming\Validata\ccs\local.gdbm (w:\vd\pki_1.0.0d\crsrv\crypt\cr_vcert.c:107)    
00000006    2.13645053    [4724] cprdr: Thread: file:line function text xcode(dcode) level: 0    
00000007    2.16700840    [4724] pcsc: Thread: file:line function text xcode(dcode) level: 0    
00000008    13.14425468    [4724] 2044,70:80,0011:00000000,Certificate /C=RU/ST=MSK/O=Orgname/OU=Msk Users/CN=MSK48979 from 170622094855Z with keyId IBM1T1ZQUNXQ9TOW (w:\vd\pki_1.0.0d\crsrv\crypt\cr_vcert.c:225)    
00000009    13.14493847    [4724] 2044,80:70,0000:4407E07D,ошибка:4407E07D:модуль CRYPTOAPI2:SIGNHASH:ошибка signhash:w:\vd\pki_1.0.0d\crypto\gcpec\gost\loadcp2.c:393: люч не существует. (0x8009000d)    
00000010    13.14501190    [4724] 2044,80:70,0000:43069064,ошибка:43069064:модуль GCPEC:GCPEC_sign:ошибка Crypto API:w:\vd\pki_1.0.0d\crypto\gcpec\gost\gcpec_sig.c:85:    
00000011    13.14507580    [4724] 2044,80:70,0000:0B080204,ошибка:0B080204:модуль x509 certificate:X509_check_private_key::причина(516):w:\vd\pki_1.0.0d\crypto\x509\x509_cmp.c:530:    
00000012    13.14510536    [4724] 2044,70:30,0011:E0700034,Verify certificate subject /C=RU/ST=MSK/O=Orgname/OU=Msk Users/CN=MSK48979    

При нескольких попытках подписания (1й раз с помощью RSA-сертификата, далее с помощью ГОСТ сертификата):

//start Sign validata easy content (after filter all rsa cert by issuers)
System.Runtime.InteropServices.COMException (0xE0700034): Исключение из HRESULT: 0xE0700034
   в cpkicom.IVCERT.Initialize(String profile, Init_Flag_t flag)
   в MDInterop.ValidataCertStore.get_instance()
   в MDInterop.ValidataCertUtilImpl.getMyCertInternal(Boolean show_ui, Boolean check_validity)
   в MDInterop.SignData3.signData(Byte[] data)

//start Sign validata easy content
System.Runtime.InteropServices.COMException (0xE0700003): Исключение из HRESULT: 0xE0700003
   в cpkicom.IVCERT.FindCert(FindParam pIFindParam, Object& FindResult)
   в MDInterop.ValidataCertUtilImpl.getMyCertInternal(Boolean show_ui, Boolean check_validity)
   в MDInterop.SignData3.signData(Byte[] data)

Версия Валидата. Клиент Orgname. Версия 2.0. Справочник сертификатов (x86). Версия 4.0. Сборка 268.5
Версия CryptoPro Версия ядра СКЗИ 3.9.8001 КС1, продукта 3.9.8227
Версия windows 7 SP1 x64

Подскажите, пожалуйста, что проверить. С чем связаны эти коды ошибок.

4

Re: 0xE0700019, 0xE0700034 при проверке подписи

[0xE0700003] Неверный криптографический контекст
(Произошла попытка использования неправильного контекста библиотеки или контекста выполнения потоковой операции)

Судя  по протоколу DbgView
Сертификат не проверился, так как не был представлен ключ IBM1T1ZQUNXQ9TOW

5 (2017-07-05 14:54:35 отредактировано alex3ee)

Re: 0xE0700019, 0xE0700034 при проверке подписи

Подскажите, пожалуйста, что проверить и с чем может быть связана ошибка?:

При проверке ЭП ГОСТ сертификата, которого нет в хранилище Валидата на проверяющей машине (корневой сертификат импортирован), ошибка:

System.Runtime.InteropServices.COMException (0xE0700019): Exception from HRESULT: 0xE0700019
   at cpkicom.IVCERT.VerifyMem(VerifyParam pIVerifyParam, Object data, Object sign_in, Object& sign_out, Object& VerifyResults)
   at MDInterop.ValidataCipf.verify_sign(Byte[] data, Byte[] sign)
   at MDInterop.SignData3.verifySign(Byte[] content, String sign)

Если на проверяющей машине ГОСТ сертификат импортировать в Валидата хранилище, то проверяется успешно.
Если сертификат из Валидата хранилища удалить (оставить корневой сертификат и crl), то 0xE0700019.
Воспроизводится на разных машинах.

Пример кода проверки подписи:

//byte[] data, byte[] sign
cpkicom.VCERT store = ValidataCertStore.get_instance();
cpkicom.VerifyParam verify_param = new cpkicom.VerifyParam();
verify_param.flag = cpkicom.VerifyParamFlag_t.Flag_Verify_Detached;
verify_param.info = cpkicom.Certinfo_t.Field_All;
dynamic _VR = new Object();
store.VerifyMem(verify_param, data, sign, null, ref _VR);  // на VerifyMem валится с ошибокой 0xE0700019, если сертификата нет в Валидата хранилище

Для информации, заметили, что если подпись сохранить как p7b, то по double click ее не открыть:
"Invalid Public Key Security Object File. This file is invalid for use as the following: PKCS #7"
На машине криптопро и валидата установлены (Справочник сертификатов 3.1 сборка 182.6, CryptoPro CSP 4.0.9842, core 4.0.9014 КС1, windows 10x64).

2.
Скиньте, пожалуйста, ссылку на описание API CCERT PKI Валидата 3й версии (нужен пример работы с функцией VCERT_VerifyCertificatePolicy).

6

Re: 0xE0700019, 0xE0700034 при проверке подписи

Простите, но "Справочник сертификатов 3.1 сборка 182.6" давно снят с поддержки, и работать с  CryptoPro CSP 4.0 он не будет.
Если не секрет, где же это он еще функционирует?

7

Re: 0xE0700019, 0xE0700034 при проверке подписи

При проверке ЭП ГОСТ сертификата, которого нет в хранилище Валидата на проверяющей машине (корневой сертификат импортирован), ошибка

Разобрались с проблемой.
В подпись не включался сертификат.