| ||||
| ||||
Программа построена в виде сервиса. Создается TLS соединение с клиентом и проверяется цепочка сертификатов. Список отозваных сертификатов находится на LDAP сервере. Первоначально там был размещен пустой список и построение цепочки и проверка проходили нормально. Затем в список отозванных сертификатов был добавлен сертификат клиента. Компьютер с данным сервисом был перегружен. Проверка опять проходит НОРМАЛЬНО - как будто в списке отзыва ничего нет. Но стоит запустить тот-же код без всякой модификации, но не как сервис, а как обычное приложение, проверка проходит правильно - проходит сообщение что сертификат отозван. Есть предположение, что CRL где-то закешировался именно для сервиса (перегрузка компьютера, остановка запуск сервиса не помогают), но где? Даже установка CRL в машинное хранилище компьютера не помогает. ОС - Win2000, SP4. Заранее спасибо, Дмитрий 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_END_CERT; 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 = 0; ChainConfig.dwUrlRetrievalTimeout = 0 ; ChainConfig.MaximumCachedCertificates=0 ; ChainConfig.CycleDetectionModulus = 0; //Создание механизма проверки цепочки сертификатов if(!CertCreateCertificateChainEngine( &ChainConfig, &hChainEngine)) { dwFlags=GetLastError(); *dwError=dwFlags; PTSTR pszMsg = NULL; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwFlags, 0, (PTSTR)&pszMsg, 0, NULL); csError->Format("Ошибка создания механизма цепочки сертификтов: %s",pszMsg); LocalFree(pszMsg); return false; } //Создаем и проверяем цепочку сертификатов if(!CertGetCertificateChain( NULL, pSert, NULL, NULL, &ChainPara, dwFlags, NULL, &pChainContext)) { dwFlags=GetLastError(); *dwError=dwFlags; PTSTR pszMsg = NULL; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwFlags, 0, (PTSTR)&pszMsg, 0, NULL); csError->Format("Ошибка вызова функции проверки цепочки сертификтов: %s",pszMsg); LocalFree(pszMsg); CertFreeCertificateChainEngine(hChainEngine); return false; } | ||||
Ответы: | ||||
| ||||
вот здесь посмотрите "C:\Documents and Settings\<user>\Application Data\Microsoft\CryptnetUrlCache\Content\" | ||||
| ||||
Большое спасибо! Очень помогло (правда кешировалось в ...\Temporary Internet Files, но там найти было уже проще). | ||||