06.09.2006 11:25:05Как проверить подпись сертификата Ответов: 11
Василий
Как проверить подпись сертификата?
 
Ответы:
11.09.2006 14:08:00Русев Андрей
Если сертификат сохранён в файл, то это можно сделать с помощью программы csptest. Для самоподписанных сертификатов:
csptest.exe -rc -cert selfsigned.cer
Для сертификатов, выпущенных некоторым УЦ, необходимо также указывать сертификат последнего:
csptest.exe -rc -der -cert user_cert.cer -der -issuer ca_cert.cer
Обратите внимание, что формат файла (DER/Base64) надо проставлять перед указанием файла. DER используется по умолчанию.
11.09.2006 15:33:56Василий
Это я знаю. А как это сделать в общем случае.Когда файла нет. А есть только контекст?
11.09.2006 15:56:36Kirill Sobolev
CryptVerifyCertificateSignatureEx
11.09.2006 16:51:05Василий
Спасибо.Вот ещё вопрос возник.
Если я создам цепочку сертификатов с помощью
CertGetCertificateChain
, будет ли это проверкой сразу и подписи и неотозванности сертификата?
11.09.2006 17:34:41Kirill Sobolev
Конечно
11.09.2006 18:00:13Василий
Допустим, я получил подписанный файл.
1.Проверил подпись
2. Проверил подпись и неотозванность сертификата (создав цепочку)

Как я понимаю, я лишь установил тот факт, что документ подписан именно этим сертификатом и сертификат достоверен. А можно мне как то однозначно установить подписавшее лицо, кроме как по полю subject( ведь оно не уникально)?


12.09.2006 10:08:42Kirill Sobolev
Вообще именно Субъект и определяет владельца сертификата.
Установить это поможет тот УЦ, который этот сертификат выпустил.
12.09.2006 10:26:25Василий
А если субъект одинаков у двух сертификатов разных людей?
(ну скажем у них одинаковое ФИО)
12.09.2006 12:12:41Kirill Sobolev
Значит в поле Субъект должны быть указаны дополнительные сведения - организация, должность, адрес и т.д.
12.09.2006 12:17:58Василий
Понятно. А как извлечь эти дополнительные поля? Для поля Namе в Subject ceotcndetn функция CertGetNameString, а для остальных?
12.09.2006 12:58:21Kirill Sobolev
Разные есть способы
можно воспользоваться CertNameToStr и разобрать получившуюся строку, а можно CryptDecodeObject и потом работать со структурой CERT_NAME_INFO