程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> SSL原理及應用(3).NET開發中處理HTTPS

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

編輯:關於.NET

在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所示。

表8-2  Request.ClientCertificate的Key值信息

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved