09.09.2005 14:18:22Проверка сертификата на отозванность Ответов: 11
Dim
Помогите ну очень надо.
Поднял тестовый УС. Издал сертификат и потом его отозвал. Иду на машину пользователя устанавливаю сертификат УЦ, сертификат пользователя, и потом запрашиваю CRL, получаю его, устанавливаю, проверяю есть отозванный сертификат, все нормально. Запускаю проверку цепочки сертификатов функциями
CertCreateCertificateChainEngine
CertGetCertificateChain
Проверка проходит все нормально.
 
Ответы:
09.09.2005 15:04:02Анатолий
А можно кусок кода с вызовом этих функций? Врямя действия CRL скоко?
09.09.2005 15:05:43kure
Посмотрите ответы
http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=1346

и можно еще статью микрософта
Troubleshooting Certificate Status and Revocation
http://www.microsoft.com/technet/security/topics/cryptographyetc/tshtcrl.mspx?#i
09.09.2005 15:59:18Dim
Игрался я с флагами в том числе и с CERT_CHAIN_REVOCATION_CHECK_CHAIN.


Вот код

BOOL cepochka_certif(PCCERT_CONTEXT pCertContext) {

HCERTCHAINENGINE hChainEngine;
CERT_CHAIN_ENGINE_CONFIG ChainConfig;
PCCERT_CHAIN_CONTEXT pChainContext;
CERT_ENHKEY_USAGE EnhkeyUsage;
CERT_USAGE_MATCH CertUsage;
CERT_CHAIN_PARA ChainPara;


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;


//---------------------------------------------------------
// Create the nondefault certificate chain engine.

if(!CertCreateCertificateChainEngine(&ChainConfig,&hChainEngine)) return FALSE;

if(!CertGetCertificateChain(
NULL, // Use the default chain engine.
pCertContext, // Pointer to the end certificate.
NULL, // Use the default time.
NULL, // Search no additional stores.
&ChainPara, // Use AND logic, and enhanced key usage
// as indicated in the ChainPara
// data structure.
0,
NULL, // Currently reserved.
&pChainContext)) // Return a pointer to the chain created.
{
CertFreeCertificateChainEngine(hChainEngine);
return FALSE;
}

if(pChainContext->TrustStatus.dwErrorStatus!=0)
{
// Если возникла ошибка записываем ее в файл.


CertFreeCertificateChainEngine(hChainEngine);
CertFreeCertificateChain(pChainContext);
return FALSE;
}
CertFreeCertificateChainEngine(hChainEngine);
CertFreeCertificateChain(pChainContext);
return TRUE;
}
09.09.2005 16:42:26kure
Что написано в микрософте по ссылке.

Revocation Checking

If CRL based status checking is used and the certificate is found to have a valid time, the presented certificate is examined to see if it contains a CRL Distribution Point (CDP) extension. The CDP extension indicates both the protocol that must be used to retrieve the CRL (HTTP, FTP, LDAP, or FILE) and the location where the CRL is stored (represented as a URL).

Using this information, CryptoAPI first searches the local certificate stores and the local cache for any CRL signed by the issuer (Certification Authority) of the certificate being validated. A cached version of a current CRL will always be used (as long as it is valid), rather than downloading the same CRL again. The following logic is used to evaluate the CRL:

Т.е. сначала ищется CRL в кэше и если срок действия CRL не истек (nextUpdate) CryptoAPI не будет грузить новый.
09.09.2005 17:24:39Dim
Ну так в моем CRL уже есть отозванный сертификат.
Действия были таковы. Запросили сертификат, получили сертификат, установили сертификат.
Отозвали сертификат, опубликовали CRL, установили CRL.
Проверяем цепочку, все нормально.
Да пример приведен самый первый там нет флага CERT_CHAIN_REVOCATION_CHECK_CHAIN сейчас он есть.
09.09.2005 17:29:33Анатолий
Повторю свой вопрос еще раз. Какой срок действия CRL? Что написано в полях Next Update и This Update? Если вы раньше выпустили CRL с сроком действия например 1 месяц то он может сохраниться в кеше и не трогать новый CRL пока не истечет скрок действи старого, то есть 1 месяц.
09.09.2005 17:30:40kure
А что значит "установили CRL"?

В кеше (\Documents and Settings\ЮЗЕР\Local Settings\Temporary Internet Files\Content.IE5
посмотрите на наличие CRL.

09.09.2005 17:37:01Dim
В указанной папке его нет.

А устанавливал его так, сохранял файл на диск потом правой кнопкой на файле, установить список отзыва ну и далее по мастеру. Потом смотрел через MMC и видел его. Да устанавливал CRL автоматически.
09.09.2005 17:46:20kure
Если в кеше (в поддиректориях) нет ранее сохраненного CRL, и CRL установлен в реестр, то должен выдаваться правильный (отозван) результат.
А что показывет простой просмотр сертификата или Outlook (Express)?
09.09.2005 17:50:00Dim
Сертификат как сертификат. Срок действия в норме, доверее к УЦ в порядке, короче ни каких ругателств не показывает. Могу выслать сертификаты и CRL.
09.09.2005 18:14:21kure
Пришлите на support@cryptopro.ru