10.08.2007 13:29:35Прочитать открытый ключ шифрования Ответов: 8
Александр
Всем привет!
У меня такой вопрос, никак не могу нарыть информацию. Подскажите кто знает.
С помощью своей программки с использованием microsoftовской библиотечки CertCli 1.0 Type Library на сервере сертификации создается заявка на сертификат соответственно. Я однозначно знаю что можно прочитать public key этого сертификата. На сервере, пока сертификат не одобрен администратором ключ не виден (в свойствах), после того как сертификат принят ключ можно посмотреть в свойствах сертификата.
Может быть кто-то знает как программно прочитать ключ? В какую сторону копать хотя бы чтобы решит эту задачу?
Спасибо большое?!
 
Ответы:
10.08.2007 13:36:08Kirill Sobolev
Вы, вероятно, саму заявку(запрос) создаете где-то в другом месте, а при помощи ICertRequest только помещаете? Пока этот запрос не одобрен сертификата просто в природе не существует, соответственно ОК из него получить невозможно. Можно получить из запроса.
10.08.2007 13:44:26Александр
Да, Вы правы, это только заявка, я путаю понятия. Эта заявка появляется в консоли Certification Authority на сервере и содержит зашифрованный текст. Можно из этого текста как-то вычленить открытый ключ?
Дело в том, что у нас уже есть такая система, и самописанная библиотека как-то парсит запрос и выделяет ключ, но я не могу посмотреть исходники чтобы узнать это.
Есть ли методы для этого и какие?
Спасибо!
10.08.2007 14:19:51Василий
Если нужно просто посмотреть на запрос - есть готовая утилита по разбору файла сертификата или запроса - certutil (имеется на Win2000 Server с установленной службой сертификации и на любом Win2003). Она работает и на XP (если просто скопировать).

certutil файл_запроса > файл_результатов

Если нужно программно - то есть функции CryptoAPI по работе с сертификатами и запросами. Они описаны в MSDN. См. CryptDecodeObject и примеры.
10.08.2007 14:54:49Александр
Подскажите, пожалуйста, эти функции можно получить из библиотеки crypt32.dll? Почему-то когда я пытаюсь зарегистрировать эту библиотеку в системе, получаю сообщение об ошибке - crypt32.dll было загружено, но найти точку входа для DllRegisterServer не удалось. Какая может быть причина?
10.08.2007 15:51:24Василий
Вообще-то, crypt32.dll уже должна быть в системе, причём, зарегистрированная.
В %windir%\system32
10.08.2007 16:00:37Александр
Гм. Тогда странно. Я не могу ее подключить к проекту, чтобы использовать там. Проект С#.
А может кто-нибудь дать кусок кода с примером использования CryptDecodeObject для получения данных ключа?
Спасибо!
10.08.2007 16:41:24Kirill Sobolev
На С# проще не возиться с cryptoapi а использовать IX509CertificateRequest.
10.08.2007 17:15:44Александр
Спасибо всем, буду разбираться!