| ||||
| ||||
Добрый вечер! Проверяет ли функция CertGetCertificateChain() валидность СОС издателей сертификатов в цепочке сертификации? Если да, то какие флаги для этого нужно поставить? | ||||
Ответы: | ||||
| ||||
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 | ||||
| ||||
Ну в каком-то смысле проверяет... Она ведет себя так - ищет в доступных местах (хранилищах или URL) подходящие СОС - по издателю и времени действия. Если находит, то проверяет сертифкат на отозванность, если нет - то статус проверки сертификата будет CERT_TRUST_REVOCATION_STATUS_UNKNOWN. Чтобы проверять сертификаты на отзыв есть несколько параметров - в зависимости от того, какие именно надо проверять. | ||||
| ||||
Дело в том, что если отсутствует корневой сертификат в цепочке функция ничего не возвращает! А если есть СОС, но он не действителен, то функция возвращает следующее: -для тех сертификатов которые отозваны она возвращает CERT_TRUST_IS_REVOKED; -для остальных сертификатов CERT_TRUST_HAS_PREFERRED_ISSUER. можно ли как-то это поправить? | ||||
| ||||
Возможно, Вы даете возможность выбирать из нескольких корневых сертификатов? Т.е. подходящих несколько, а функция выбирает какой-то один - он и объявляется "Preferred Issuer" | ||||
| ||||
А как убрать выбор из нескольких корневых сертификатов? И насколько я понял флага, что один из СОС в цепочке сертификатов недействителен, нет? | ||||
| ||||
Удалить из хранилища - по другому никак. Да, такого флага нет. | ||||
| ||||
Спасибо за ответы! В корневом хранилище подходищий сертификат только один!!! И я не понимаю почему функция не может вернуть CERT_TRUST_IS_UNTRUSTED_ROOT если не найдет корневой сертификат в цепочке сертификации? Но если функция не умеет определять валидность СОС придётся свой построитель путей писать | ||||
| ||||
Если корневой сертификат не найден, то цепочка не построится. UNTRUSTED_ROOT вернется только если цепочка заканчивается на недоверенном сертификате. Функция эта действительна не всегда правильно строит цепочки (есть расхождения с RFC) и все случаи ошибок конечно лучше проверять вручную (присутствие сертификата в СОС, срок действия СОС, подпись СОС и т.д). | ||||
| ||||
Ещё раз Большое спасибо! Подскажите пожалуйста номер RFC! | ||||
| ||||
RFC2459 | ||||