05.08.2005 13:06:58Спиок отзыва на LDAP и приложение как сервис Ответов: 2
Дмитрий
Программа построена в виде сервиса. Создается 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;
}
 
Ответы:
05.08.2005 13:40:00Kirill Sobolev
вот здесь посмотрите
"C:\Documents and Settings\<user>\Application Data\Microsoft\CryptnetUrlCache\Content\"
08.08.2005 9:45:14Дмитрий
Большое спасибо! Очень помогло (правда кешировалось в ...\Temporary Internet Files, но там найти было уже проще).