По поводу атрибута вопрос снят, т.к. Анатолий Беляев рекомендовал всегда использовать Cades.
Также Анатолий сказал, что в любом случае необходимо использовать плагин, чтобы наше приложение могло поддерживать любой браузер. Различие, использовать тип CADES_BES или XLONG_TYPE_1, необходимо строить по признаку - есть ли в сертификате расширение AIA с адресом OCSP-службы (т.к. в Firefox это проверить нельзя, то предложил хранить в системе имена УЦ, которые выпустили сертификаты с этим расширением и если УЦ выбранного сертификат есть в этом списке, то считать, что и расширение у него есть).
Применил эту рекомендацию. Теперь создание подписи типа CADES_BES проходит без ошибок, а проверка падает с ошибкой, что сертификат не подходит для такого использования.
Ссылка на письмо, которое я уже направил Анатолию (https://dl.dropbox.com/u/22411220/message.msg)
Там есть архив, содержащий:
1) Значение отделенной подписи (CADES_BES).
2) Сертификат, на котором создана подпись.
3) Лог, собранный через dbgView, при проверке подписи.
Можете объяснить, в чем проблема в этом случае?
Как еще в момент создания подписи понять (т.к. при подписании ошибок никаких не выдается), что выбранный сертификат не подойдет даже для усовершенствованной подписи типа CADES_BES?
Вот значимая часть лога:
00000017 0.01469048 [2860] cades.dll: {1908} /CChainPolicyVerification::chainContext/ ChainValidation.h(639) : #start#
00000018 0.01486236 [2860] pkivalidator.dll: {1908} /CertDllVerifySignatureCertificateChainPolicy/ CertDllVerifyCertificateChainPolicy.cpp(47) : Start
00000019 0.01493947 [2860] pkivalidator.dll: {1908} /CheckInitAndGetExtraStatus/ CertDllVerifyCertificateChainPolicyImpl.cpp(1228) : pExtraStatus = 0x00000000
00000020 0.01498954 [2860] pkivalidator.dll: {1908} /CheckAndGetExtraPara/ CertDllVerifyCertificateChainPolicyImpl.cpp(1192) : pExtraPara = 0x02619504
00000021 0.01503934 [2860] pkivalidator.dll: {1908} /CertDllVerifyPrivateKeyUsagePeriodCertificateChainPolicy/ CertDllVerifyCertificateChainPolicy.cpp(45) : Start
00000022 0.01508844 [2860] pkivalidator.dll: {1908} /CheckInitAndGetExtraStatus/ CertDllVerifyCertificateChainPolicyImpl.cpp(1228) : pExtraStatus = 0x00000000
00000023 0.01513712 [2860] pkivalidator.dll: {1908} /CheckAndGetExtraPara/ CertDllVerifyCertificateChainPolicyImpl.cpp(1192) : pExtraPara = 0x0041de54
00000024 0.01518664 [2860] pkivalidator.dll: {1908} /CertDllVerifyBasicConstraintsCertificateChainPolicy/ CertDllVerifyCertificateChainPolicy.cpp(54) : Start
00000025 0.01524132 [2860] pkivalidator.dll: {1908} /ReportError/ CertDllVerifyCertificateChainPolicyImpl.cpp(1325) : No error encountered. Other checks can be performed - returning false.
00000026 0.01529133 [2860] pkivalidator.dll: {1908} /CertDllVerifyCertificateChainPolicyProxy/ CertDllVerifyCertificateChainPolicy.cpp(28) : Finish. Returning TRUE.
00000027 0.01534336 [2860] pkivalidator.dll: {1908} /ReportError/ CertDllVerifyCertificateChainPolicyImpl.cpp(1325) : No error encountered. Other checks can be performed - returning false.
00000028 0.01544407 [2860] pkivalidator.dll: {1908} /CertDllVerifyCertificateChainPolicyProxy/ CertDllVerifyCertificateChainPolicy.cpp(28) : Finish. Returning TRUE.
00000029 0.01549603 [2860] pkivalidator.dll: {1908} /ReportError/ CertDllVerifyCertificateChainPolicyImpl.cpp(1325) : No error encountered. Other checks can be performed - returning false.
00000030 0.01556553 [2860] pkivalidator.dll: {1908} /SignatureImpl/ CertDllVerifyCertificateChainPolicyImpl.cpp(738) : Key Usage extension does not contain neither digitalSignature nor nonRepudiation bits.
00000031 0.01562014 [2860] pkivalidator.dll: {1908} /ReportError/ CertDllVerifyCertificateChainPolicyImpl.cpp(1357) : No extra status supplied. Setting pPolicyStatus->dwError = 0x800b0110, pPolicyStatus->lChainIndex = 0, pPolicyStatus->lElementIndex = 0.
00000032 0.01567301 [2860] pkivalidator.dll: {1908} /ReportError/ CertDllVerifyCertificateChainPolicyImpl.cpp(1365) : Error encountered and no extra status supplied. Other checks must not be performed - returning true.
00000033 0.01575487 [2860] pkivalidator.dll: {1908} /CertDllVerifyCertificateChainPolicyProxy/ CertDllVerifyCertificateChainPolicy.cpp(28) : Finish. Returning TRUE.
00000034 0.01602340 [2860] cades.dll: {1908} /CChainPolicyVerification::chainContext/ ChainValidation.h(657) : #failure# HRESULT:
Отредактировано пользователем 10 декабря 2012 г. 19:32:20(UTC)
| Причина: Не указана