Как добавить сертификат реестра в HttpWebRequest?

Заранее извиняюсь, если это дублирующий вопрос. Я новичок в "жаргоне" HttpWebRequest, и мои поиски в Google оказались безрезультатными.

Некоторое время назад я написал контроллер входа в систему, который использует HttpWebRequest. Он отлично работает, когда я запускаю его дома. Я попробовал тот же контроллер входа в систему из-за брандмауэра моей компании, и он ожидает прохождения сертификата аутентификации клиента. Я прочитал в Интернете, что сертификат находится в системном реестре моего рабочего стола. Конечно же, я могу открыть IE и параметры Интернета-> контент-> сертификаты. Я вижу в диалоговом окне сертификат клиента, который IE использует для того же, что я хочу сделать с моим контроллером входа в систему.

Может ли кто-нибудь предоставить фрагмент кода C#, показывающий способ добавления клиентских сертификатов из реестра в мой HttpWebRequest?

Например,

var request = (HttpWebRequest) WebRequest.Create("https://www.someplace.com/Login");
                request.Credentials = CredentialCache.DefaultCredentials;
                request.ClientCertificates.Add(); //<---- ? how to add registry certs?
                request.KeepAlive = true;

и т.п.


person sapbucket    schedule 30.05.2013    source источник


Ответы (1)


В этой статье базы знаний MS рассказывается, что вам нужно: как отправить сертификат клиента с помощью классов HttpWebRequest и HttpWebResponse.

Как описано в статье, у вас есть два варианта:

  1. Используйте класс X509Certificate для чтения сертификата из файла .cer.
  2. Используйте вызовы CryptoAPI для извлечения информации о сертификате непосредственно из хранилища сертификатов.

Второй вариант доставляет неудобства и требует повышенного доверия для извлечения из сертификата. хранить. Таким образом, вы хотите пойти на вариант 1, если это возможно. Что-то вроде этого:

X509Certificate Cert = X509Certificate.CreateFromCertFile("C:\\mycert.cer");
HttpWebRequest Request = (HttpWebRequest)WebRequest
                         .Create("https://YourServer/sample.asp");
Request.ClientCertificates.Add(Cert);
person Snixtor    schedule 31.05.2013
comment
Спасибо за ответ Сникстор. Я тоже зашел так далеко в процессе своего открытия. Проблема в том, что ваш пример загружает сертификат из файловой системы. из того, что я обнаружил, сертификаты живут в реестре (БД), а не в файловой системе. Затем решение становится чем-то, связанным с извлечением его из реестра. Я буду продолжать грузоперевозки и опубликую свой ответ, если найду его. в то же время, если кто-нибудь знает трюк, пожалуйста, напишите. - person sapbucket; 31.05.2013
comment
Мой ответ делает подробное описание того, что вам нужно. Не просто смотрите на пример кода и двигайтесь дальше. Прочтите ответ и просмотрите статью базы знаний MS. Метод 2 (с использованием вызовов CryptoAPI) извлекает сертификат непосредственно из хранилища сертификатов (реестра). Я не опубликовал полный пример кода, потому что это будет просто (большая) копия-вставка из статьи базы знаний. Если о CyrptoAPI не может быть и речи, тогда, как подробно описано в статье, используйте Microsoft Internet Explorer для экспорта файла .cer и используйте метод 1. - person Snixtor; 01.06.2013