| ||||
| ||||
Я пытаюсь собрать тестовую систему с микрософтовским CA. Есть сертификаты сервера и клиента, они между собой связываются по TLS с использованием Ваших примеров. Я предположим, клиентский сертификат скомпрометирован. Я его отправляю в Revoked, публикую CRL. Запускаю пример - работает. Хорошо, скачиваю CRL на сервер, инсталлирую. Запускаю пример - работает. А не должен, клиентский сертификат то скомпрометирован ! Ошибка где-то в моих действиях, или ваш стандартный пример просто не учитывает CRL ? Если ошибка - то как делать правильно? Если пример не учитывает CRL - как его научить ? Спасибо. | ||||
Ответы: | ||||
| ||||
Здравствуйте, > Ошибка где-то в моих действиях, или ваш стандартный пример просто не учитывает CRL ? > Если ошибка - то как делать правильно? Если пример не учитывает CRL - как его научить ? В примере не заказывается анализ CRL. В функции WebServer.c:443!VerifyClientCertificate if(!CertGetCertificateChain( NULL, pServerCert, NULL, pServerCert->hCertStore, &ChainPara, CERT_CHAIN_CACHE_END_CERT, NULL, &pChainContext)) { Status = GetLastError(); printf("Error 0x%x returned by CertGetCertificateChain!\n", Status); goto cleanup; } -------------------------------------------------------------------------------- К флажку CERT_CHAIN_CACHE_END_CERT надо бы что-нибудь добавить... -------------------------------------------------------------------------------- Flag Meaning CERT_CHAIN_REVOCATION_CHECK_END_CERT Revocation checking is done on the end certificate and only the end certificate. CERT_CHAIN_REVOCATION_CHECK_CHAIN Revocation checking is done on all of the certificates in every chain. CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT Revocation checking in done on all certificates in all of the chains except the root certificate. | ||||