Murat Seisenov написал:
Добрый день!
Внес изменения в KalkanCryptCOM, чтобы можно было получить сертификат подписи вне зависимости от наличия атрибута Id в структуре XML.
Думаю сегодня выложим новую версию библиотеки в SDK.
Здравствуйте!
Спасибо за оперативность.
Можно уточнить, как будет происходить выборка подписи? Будет браться последняя подпись?
У нас по бизнес процессу некоторые виды документов подписываются до 5-6 подписчиками.
В принципе, если будет происходить выборка по Id подписи, тоже не плохо. Для того, чтобы узнать, сколько подписей в документе я написал:
string[] s = outInfo.Split('\n');
_signId = s.Where(w => w.Contains("Signature N")).Count();
И запросить подпись по Id не составляет проблем.
Хотелось бы еще уточнить, как можно получить список ошибок при вызове метода
VerifyXML
Вот пример:
Использую просроченный сертификат.
Где можно получить список этих ошибок:
err=10; msg=certificate has expired
XMLSec Initialize - OK.
XMLSec check version - OK.
XMLSec crypto init - OK.
XMLSec crypto library init - OK.
XMLSec Initialize - OK.
XMLSec parse doc - OK.
Get PKI data properties - OK.
Get PKI data properties - OK.
Get PKI data properties - OK.
XMLSec verify xml - found 1 sign(s).
XMLSec load trusted certificates - OK.
XMLSec-error:
func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=341:obj=x509-store:subj=unknown:error=71:certificate verification failed:X509_verify_cert: subject=/CN=\xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2\xD0\x9E\xD0\x92 \xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2/SN=\xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2\xD0\x9E\xD0\x92/serialNumber=IIN123456789011/C=KZ/L=\xD0\x90\xD0\xA1\xD0\xA2\xD0\x90\xD0\x9D\xD0\x90; issuer=/C=KZ/L=\xD0\x90\xD0\xA1\xD0\xA2\xD0\x90\xD0\x9D\xD0\x90/ST=\xD0\x90\xD0\xA1\xD0\xA2\xD0\x90\xD0\x9D\xD0\x90;
err=10; msg=certificate has expired
XMLSec-error:
func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=374:obj=x509-store:subj=unknown:error=76:certificate has expirred:subject=/CN=\xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2\xD0\x9E\xD0\x92 \xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2/SN=\xD0\xA2\xD0\x95\xD0\xA1\xD0\xA2\xD0\x9E\xD0\x92/serialNumber=IIN123456789011/C=KZ/L=\xD0\x90\xD0\xA1\xD0\xA2\xD0\x90\xD0\x9D\xD0\x90; issuer=/C=KZ/L=\xD0\x90\xD0\xA1\xD0\xA2\xD0\x90\xD0\x9D\xD0\x90/ST=\xD0\x90\xD0\xA1\xD0\xA2\xD0\x90\xD0\x9D\xD0\x90; err=10; msg=certificate has expired
XMLSec-error:
func=xmlSecKeysMngrGetKey:file=keys.c:line=1246:obj=unknown:subj=xmlSecKeysMngrFindKey:error=1:xmlsec library function failed:
XMLSec-error:
func=xmlSecDSigCtxProcessKeyInfoNode:file=xmldsig.c:line=790:obj=unknown:subj=unknown:error=45:key is not found:details=NULL
XMLSec-error:
func=xmlSecDSigCtxProcessSignatureNode:file=xmldsig.c:line=503:obj=unknown:subj=xmlSecDSigCtxProcessKeyInfoNode:error=1:xmlsec library function failed:
XMLSec-error:
func=xmlSecDSigCtxVerify:file=xmldsig.c:line=341:obj=unknown:subj=xmlSecDSigCtxSignatureProcessNode:error=1:xmlsec library function failed:
OpenSSL error:
1432:error:8006A07E:lib(128):GOST2001_DO_VERIFY:signature mismatch:.\engines\ccgost\gost2001.c:265:
XMLSec verify xml - FAILED.
XMLSec verify xml - FAILED.
08F0001C - Ошибка верификации подписи xml