Как добавить сертификат реестра в 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;
и т.п.
1 ответ
Эта статья базы знаний MS посвящена тому, что вам нужно: как отправить сертификат клиента с помощью классов HttpWebRequest и HttpWebResponse.
Как описано в статье, у вас есть два варианта:
- Использовать
X509Certificate
класс для чтения сертификата из файла.cer. - Используйте вызовы CryptoAPI для извлечения информации о сертификате непосредственно из хранилища сертификатов.
Второй вариант - это неприятность, и для получения сертификата требуется повышенное доверие. хранить. Таким образом, вы захотите перейти на вариант 1, если это возможно. Что-то вроде этого:
X509Certificate Cert = X509Certificate.CreateFromCertFile("C:\\mycert.cer");
HttpWebRequest Request = (HttpWebRequest)WebRequest
.Create("https://YourServer/sample.asp");
Request.ClientCertificates.Add(Cert);