| ||||
| ||||
Здравствуйте, уважаемые. Я хочу, имея сертификат (контекст), получить значение, которое отображает IE в поле "Кому выдан" свойств сертификата. Я его интерпретирую как имя владельца сертификата и использую в программе. Я считаю, что это Subject - CommonName, извлекаю это так: CryptDecodeObjectEx даёт мне нужную структуру из которой я извлекал нужный атрибут вызовом CertFindRDNAttr(szOID_COMMON_NAME, pvStructInfo) и всё работало замечательно, для сертификатов у которых CN один. Но при парсинге сертификата, выданного CA от Microsoft 2003 Server, оказалось, что в этих сетификатах два атрибута CN. Subject: CN=Иванов Иван Иванович, CN=Users, ... и CertFindRDNAttr возвращает второй CN "Users" (не знаю, "второй" или последний или первый... смотря как считать, важно что "не тот, что мне надо"). Но в то-же время в IE "Кому выдан" пишется совершенно предсказуемо "Иванов Иван Иванович". В связи с этим вопрос: как правильно получить "Кому выдан"? 1. можно ли как-то извлечь все атрибуты CN ? 2. вариант неэстетичный - парсить Subject самому и вкусить все CN вручную. Что посоветуете? Спасибо заранее. | ||||
Ответы: | ||||
| ||||
Он второй с конца (если вообще CN последний атрибут). Атрибуты имени окно просмотра сертификата показывает в обратном порядке. Для вытаскивания нужного (т.е. 1го с конца) без распарсивания можно воспользоваться CertGetNameString(..,CERT_NAME_SIMPLE_DISPLAY_TYPE,..) | ||||
| ||||
Спасибо большое, с CertGetNameString всё заработало как надо и гораздо проще чем у меня было. | ||||