30.07.2002 18:17:37Приведите пример верификации сертификата для csptest.exe Ответов: 1
Михаил Символоков
Здравствйте...
Вот какой вопрос: имеется сертификат с именем "1" созданный на сайте Crypto Pro. Требуется проверить его корректность. Набираю:
csptest.exe -rc -chain 1 -issuer Test
Получаю:
Error status for the chain:
No error found for this certificate or chain.

Info status for the chain:
No information status reported.
The Original chain is free.

Вообще-то плохо понятно возникла ли ошибка? Корректный сертификат или нет? :о\

Как правильно использовать csptest.exe для проверки корректности сертификатов?

P.S.
Если бы в samples.zip лежали бат-файлы с примерами использования csptest.exe к вам меньше обращались бы с вопросами...
 
Ответы:
31.07.2002 20:58:09kure
Вообще csptest это пример использования функций urownq CryptoAPI и CSP.
Функции в файле request.c (опция -rc) показывают возможность:
проверки запроса (-rec)
проверки сертификата с использованием сертификата издателя (-cert имя -issuer имя)
построения и проверки цепочки (-chain).

В последнем случае используется только имя владельца сертификата. Имя издателя не используется.
Т.е. вызывать нужно:
csptest.exe -rc -chain 1
Кроме этого сертификат ищется только в справочнике "личные" (MY) (функция read_cert_from_my) и по критерию любое совпадение введенной строки с подстрокой в имени владельца
ret = CertFindCertificateInStore (hCertStore,
TYPE_DER,
0,
CERT_FIND_SUBJECT_STR,
A2W(subject_name),
NULL);

Так как програма тестовая, мы туда может быть добавили излишне много функциональности и много вывода на экран.
Например, при проверки цепочки дополнительно показали как можно определить наличие дополнений в сертификате:
ret = get_usage (pCertContext);
Поэтому и лишняя информация выводится.

В результате проверки функцией CertGetCertificateChain выдается структура, содержащая результаты проверки (список) по каждому элементу в цепочке (CERT_CHAIN_CONTEXT).

Мы выводим комбинированный статус проверки всей цепочки, содержащейся в поле pChainContext->TrustStatus.dwErrorStatus.
И результат печатаем как в MSDN:

dwErrorStatus
The following error status codes are defined for certificates and chains.

Value Meaning
CERT_TRUST_NO_ERROR No error found for this certificate or chain.

Второй код проверки - информационный
(pChainContext->TrustStatus.dwInfoStatus.
Если его нет, печатаем "No information status reported."