17.03.2005 17:51:33CertGetCertificateChain() Ответов: 10
Александр
Добрый вечер!
Проверяет ли функция CertGetCertificateChain() валидность СОС
издателей сертификатов в цепочке сертификации?
Если да, то какие флаги для этого нужно поставить?
 
Ответы:
18.03.2005 10:31:51Василий
CERT_CHAIN_REVOCATION_CHECK_CHAIN - Revocation checking is done on all of the certificates in every chain, в отличие от CERT_CHAIN_REVOCATION_CHECK_END_CERT или CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
18.03.2005 10:35:33Kirill Sobolev
Ну в каком-то смысле проверяет...
Она ведет себя так - ищет в доступных местах (хранилищах или URL) подходящие СОС - по издателю и времени действия. Если находит, то проверяет сертифкат на отозванность, если нет - то статус проверки сертификата будет CERT_TRUST_REVOCATION_STATUS_UNKNOWN. Чтобы проверять сертификаты на отзыв есть несколько параметров - в зависимости от того, какие именно надо проверять.
18.03.2005 11:10:29Александр
Дело в том, что если отсутствует корневой сертификат в цепочке функция ничего не возвращает! А если есть СОС, но он не действителен, то функция возвращает следующее:
-для тех сертификатов которые отозваны она возвращает CERT_TRUST_IS_REVOKED;
-для остальных сертификатов CERT_TRUST_HAS_PREFERRED_ISSUER.
можно ли как-то это поправить?
18.03.2005 11:19:28Kirill Sobolev
Возможно, Вы даете возможность выбирать из нескольких корневых сертификатов? Т.е. подходящих несколько, а функция выбирает какой-то один - он и объявляется "Preferred Issuer"
18.03.2005 11:59:42Александр
А как убрать выбор из нескольких корневых сертификатов?
И насколько я понял флага, что один из СОС в цепочке сертификатов недействителен, нет?
18.03.2005 12:03:24Kirill Sobolev
Удалить из хранилища - по другому никак.
Да, такого флага нет.
18.03.2005 12:26:15Александр
Спасибо за ответы!
В корневом хранилище подходищий сертификат только один!!! И я не понимаю почему функция не может вернуть CERT_TRUST_IS_UNTRUSTED_ROOT если не найдет корневой сертификат в цепочке сертификации?
Но если функция не умеет определять валидность СОС придётся свой построитель путей писать
18.03.2005 12:58:26Kirill Sobolev
Если корневой сертификат не найден, то цепочка не построится. UNTRUSTED_ROOT вернется только если цепочка заканчивается на недоверенном сертификате.
Функция эта действительна не всегда правильно строит цепочки (есть расхождения с RFC) и все случаи ошибок конечно лучше проверять вручную (присутствие сертификата в СОС, срок действия СОС, подпись СОС и т.д).
18.03.2005 13:37:19Александр
Ещё раз Большое спасибо!
Подскажите пожалуйста номер RFC!
18.03.2005 13:41:19Kirill Sobolev
RFC2459