目前我正在編寫一個實用程序應用程序,它將連接到給定的IP和端口,並使用HttpWebRequest檢查SSL證書中的信息。當我嘗試提取證書時,出現了一個拋出異常的錯誤。這個例外似乎是因爲應對SSL證書的行爲似乎觸發了另一個驗證檢查。如何在C#中使用HttpWebRequest的SSL證書?
這裏是代碼,也許有人可以告訴我一個更好的方法來做到這一點,或者如果我失去了一些東西。我不關心SSL證書是否過期或與URL不匹配。這些與我正在做的事無關。
當我指定的委託一個新的變量X509證書,並期待在調試器中的變量,所有屬性表明SSLCert.Issuer投擲型「System.Security.Cryptography.CyrptographicException」
的例外當我嘗試訪問的sslcert的財產,我得到下面的異常拋出:m_safeCertContext是無效的句柄
I'be搜索的結果異常,但一切都指向一個無效的證書,這可能是如果證書已過期,則爲true,IP可能爲true和我正在連接的端口組合。但是,由於我使用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;
這裏有很多關於在HttpWebRequest中使用SSL和證書的問題和解答。你有沒有看過右邊的「相關」問題,或者搜索了[ssl certificate httpwebrequest]? – 2011-03-11 16:13:51
是的,幾乎每個人都在問如何使用客戶端證書,我沒有使用,或者因爲無效的證書而在HttpWebRequest中發生錯誤,我已經處理了這個錯誤。 – omniplex 2011-03-11 16:19:51
我應該補充說,最大的問題是我想將X509Certificate複製到另一個X509Certificate類型變量,並且當我執行「this.SSLCert = certificate;」時,.NET似乎再次驗證了證書。 – omniplex 2011-03-11 16:23:30