SSL原理及應用(3).NET開發中處理HTTPS

來源:互聯網
上載者:User

在ASP.NET、SQL Server、WCF等通訊領域,微軟都提供了基於SSL的安全保護機制。遺憾的是,.NET並沒有對SSL協議本身提供像TCP、UDP這樣的基礎網路通訊協定的編程性支援。如果想從協議的角度處理SSL通訊或者想構建完整的SSL架構,那麼.NET幫不上你,但是還有選擇,許多第三方安全通訊的項目提供了支援,比如OpenSSL。這不意味著我們在此領域將無所作為,第6章介紹了.NET中運算元字認證的兩個類:

q  System.Security.Cryptography.X509Certificates.X509Certificate2類

q  System.Security.Cryptography.X509Certificates.X509Store類

在Web開發中,SSL通訊由瀏覽器和Web伺服器來實現通訊細節。封裝了HTTP協議的WebRequest、WebResponse等類提供了處理HTTPS請求的能力。當我們在程式中向HTTPS連結發送請求的時候,可以擷取伺服器返回的認證。

請求HTTPS連結

當使用WebRequest類請求HTTPS連結的時候,在操作上和請求普通的HTTP連結沒什麼不同。代碼清單8-1示範了如何擷取一個HTTPS連結的方法。

代碼清單 8-1擷取HTTPS連結

try    {    Uri uri = new Uri("https://www.sample.com/https.aspx");             WebRequest http = HttpWebRequest.Create(uri);    HttpWebResponse response = (HttpWebResponse)http.GetResponse();    Stream stream = response.GetResponseStream();    }    catch(UriFormatException e)    {    Console.WriteLine("無效的URL");    }    catch(IOException e)    {    Console.WriteLine("串連失敗");    }

代碼清單8-1中,通過HttpWebRequest對象的Create方法建立一個簡單的HTTPS請求,並反回一個HttpWebResponse對象。

說明 HttpWebRequest類對WebRequest中定義的屬性和方法提供支援,在使用HttpWebRequest對象向HTTP伺服器發起請求時請不要使用HttpWebRequest對象的建構函式,而應該使用WebRequest.Create()方法來初始化新的HttpWebRequest對象。如果統一資源識別項方案是"http://"或"https://"時,Create()則返回HttpWebResponse對象。

認證資訊的擷取與認證載入

在代碼清單8-1的基礎上,只需略加修改就可以讓程式適應需要提交用戶端認證的情況。如代碼清單8-2所示。

碼清單8-2  認證資訊的擷取與認證載入

public void Test()         {             Uri uri = new Uri("https://www.sample.com/https.aspx");                     HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(uri);                              X509Certificate cer = X509Certificate.CreateFromCertFile("認證檔案地址");             httpRequest.ClientCertificates.Add(cer);             HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse();             Stream stream = response.GetResponseStream();         }

在代碼清單8-2中,首先建立一個X509Certificate對象,把它添加到WebRequest的ClientCertificates集合中。我們的認證一定要保護密鑰資訊。

在伺服器端,可以從用戶端請求的上下文中擷取用戶端提交的認證。

在Asp.NET中,可以通過下面的代碼來擷取認證資訊:

Request.ClientCertificate(key[SubField])

在上面的代碼中,Key指定要擷取認證欄位的名稱,不同的Key值具有不同的含義,SubField為可選欄位。Key具體資訊如表8-2所示。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.