| ||||
| ||||
С какими параметрами вызывать CertGetCertificateChain, чтобы автоматически эта функция проверила удаленный список отзывов? Или необходимы иные действия? В MSDN есть такие ключи: CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY Revocation checking only accesses cached URLs. Windows NT: This flag is not supported. и CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL Uses only cached URLs in building a certificate chain. The Internet and intranet are not searched for URL-based objects. Note This flag is not applicable to revocation checking. Set CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY to use only cached URLs for revocation checking. Но URL-то будет указывать на сервер в интернете, там же сказано - не будет искаться. Плюс, NT не держится. | ||||
Ответы: | ||||
| ||||
Аналогичный вопрос: как реализовать OCSP? | ||||
| ||||
Эти флаги как раз чтобы не лезть по CDP. По умолчанию она как полезет, для этого полезно таймаут, чтобы не тормозила если CDP недоступна. | ||||
| ||||
Т.е. получается, что не надо указывать никакие ключи? Сейчас кусок проверяющего кода выглядит так: HCERTCHAINENGINE hChainEngine; CERT_CHAIN_ENGINE_CONFIG ChainConfig; PCCERT_CHAIN_CONTEXT pChainContext; CERT_ENHKEY_USAGE EnhkeyUsage; CERT_USAGE_MATCH CertUsage; CERT_CHAIN_PARA ChainPara; DWORD dwFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN; //--------------------------------------------------------- // Initialize data structures. EnhkeyUsage.cUsageIdentifier = 0; EnhkeyUsage.rgpszUsageIdentifier=NULL; CertUsage.dwType = USAGE_MATCH_TYPE_AND; CertUsage.Usage = EnhkeyUsage; ChainPara.cbSize = sizeof(CERT_CHAIN_PARA); ChainPara.RequestedUsage=CertUsage; ChainConfig.cbSize = sizeof(CERT_CHAIN_ENGINE_CONFIG); ChainConfig.hRestrictedRoot= NULL ; ChainConfig.hRestrictedTrust= NULL ; ChainConfig.hRestrictedOther= NULL ; ChainConfig.cAdditionalStore=0 ; ChainConfig.rghAdditionalStore = NULL ; ChainConfig.dwFlags = CERT_CHAIN_CACHE_END_CERT; ChainConfig.dwUrlRetrievalTimeout= 0 ; ChainConfig.MaximumCachedCertificates=0 ; ChainConfig.CycleDetectionModulus = 0; if(CertCreateCertificateChainEngine( &ChainConfig, &hChainEngine)) { } else { } if(CertGetCertificateChain( NULL, pCertContext, NULL, NULL, &ChainPara, dwFlags, NULL, &pChainContext)) { } else { SetError(); } Какие ключи надо указать, чтобы поиск происходил по CDP? И что насчет таймаута? Есть стандартные способы или имеется в виду самому реализовать поток ожидания? | ||||
| ||||
Поиск и так будет по CDP. Для таймаута надо заполнить поле dwUrlRetrievalTimeout, но это вроде как только начиная с win2000 работает. | ||||
| ||||
Правильно ли я понял, что в приведенном куске кода, при проверке, приложение будет стучаться к серверу, указанному в сертификате? Ключи менят не надо? Насчет таймаута, - вся структура CERT_CHAIN_ENGINE_CONFIG поддерживаешься лишь в 2000, ХР. | ||||
| ||||
Если нужно - будет. Т.е. сначала посмотрит хранилища, потом кэш а только потом уже полезет онлайн. | ||||
| ||||
Понятно, спасибо. А для проверки в Win98 надо использовать Capicom? Но тогда где можно найти нормальное ее описание? В МСДН все урезанное, тут этого нет, на майкрософте не найти ничего. Конкретней, возвращаемые ошибки при проверке. Или есть ли где-нибудь примеры? В CC2RINST нет ничего подобного. | ||||
| ||||
Почему, можно и CryptoAPI обойтись. И CertCreateCertificateChainEngine и CertGetCertificateChain: Windows NT/2000/XP: Included in Windows NT 4.0 SP4 and later. Redistributable: Requires Internet Explorer 5 or later on Windows 95/98. Описания CAPICOM лучше чем от MS Вы вряд ли найдете :) | ||||
| ||||
А где тогда можно найти описание возвращаемых ошибок? Описания даже у майкрософта - 0! | ||||
| ||||
Ну FormatMessage может помочь... А о каких именно ошибках идет речь? | ||||