Как использовать сертификаты SSL с HttpWebRequest в C#?C#

Место общения программистов C#
Ответить
Anonymous
 Как использовать сертификаты SSL с HttpWebRequest в C#?

Сообщение Anonymous »

В настоящее время я пишу служебное приложение, которое будет подключаться к заданному IP-адресу и порту и проверять информацию в сертификате SSL с помощью HttpWebRequest. Когда я пытаюсь извлечь сертификат, я получаю сообщение об ошибке, связанное с возникновением исключения. Исключением, по-видимому, является то, что процесс копирования сертификата SSL запускает еще одну проверку.

Вот код, и, возможно, кто-то может показать мне лучший способ сделать это или я что-то упускаю. Меня не волнует, истек ли срок действия SSL-сертификата или он не соответствует URL-адресу. Ничто из этого не имеет отношения к тому, что я делаю.

Когда я назначаю X509Certificate в делегате новой переменной и смотрю на переменную в отладчике, все свойства показывают, что SSLCert.Issuer выдал исключение типа «System.Security.Cryptography.CyrptographicException»

Когда я пытаюсь получить доступ к свойству SSLCert, Я получаю следующее исключение: m_safeCertContext — недопустимый дескриптор

Меня ищут это исключение, но все указывает на недействительный сертификат, что может быть правдой, если срок действия сертификата истек, и может быть правдой для комбинации IP и порта, к которой я подключаюсь. Но поскольку я подключаюсь к IP-адресу, используя IP-адрес, а не что-либо, что соответствует общему имени, я ожидаю этого, и меня это не волнует, поскольку мне все еще нужна информация.

Код приведен ниже, я также добавил несколько комментариев о том, что не работает, а что работает.

// To get around the SSL validation in the HttpWebRequest
System.Net.ServicePointManager.ServerCertificateValidationCallback =
delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
// The below works but isn't what I want. CertName and ExpireDate are both Strings
this.CertName = ProcessSubject(certificate.Subject);
this.ExpireDate = certificate.GetExpirationDateString();
// The below works but the X509Certificate SSLCert shows exceptions in the debugger for most of the properties.
this.SSLCert = certificate;

return true; // **** Always accept
};
HttpWebRequest myRequest = (HttpWebRequest)System.Net.WebRequest.Create("https://" + this.IP + ":" + this.Port + "/SSLCheck.html");
myRequest.KeepAlive = false;
myRequest.Method = "GET";

try
{
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
}
catch (Exception e)
{
if (e.Message != "The remote server returned an error: (404) Not Found.")
{
throw Exception("Error");
}

}

// THE BELOW FAILS
this.CertName = this.SSLCert.Subject;


Подробнее здесь: https://stackoverflow.com/questions/527 ... quest-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»