簡體   English   中英

使用帶有HTTPS證書的System.Net.WebClient

[英]Using System.Net.WebClient with HTTPS certificate

在我的C#Windows客戶端中,我有一個POST提交給“母艦”。 當然,我希望提交中的數據是安全的,因此我支付了HostGator向我發放SSL證書的費用。

我保存了.CER文件,我正在構建請求:

//wrapper for WebClient object to use certificate file
class SecureWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
        string certPath = @"e:\mycertificate.cer";
        X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath);
        request.ClientCertificates.Add(myCert);
        return request;
    }
}

//request
private static SecureWebClient client = new SecureWebClient();
private static NameValueCollection = new NameValueCollection();
nvc.Add(POST_ACTION, ACTION_CODE_LOGIN);
nvc.Add(POST_EMAIL, email);
nvc.Add(POST_PASSWORD, password);

sResponse = System.Text.Encoding.ASCII.GetString(client.UploadValues(BASE_URL + ACTION_PAGE, nvc));

它拋出一個System.Net.WebException:

底層連接已關閉:發送時發生意外錯誤。

InnerException是一個System.IO.IOException:

由於意外的數據包格式,握手失敗。

對我做錯了什么的見解?

如果您沒有使用客戶端證書,並且可以使用https://訪問您的服務器,那么您的代碼應如下所示:

private static WebClient client = new WebClient();
private static NameValueCollection nvc= new NameValueCollection();

nvc.Add(POST_ACTION, ACTION_CODE_LOGIN);
nvc.Add(POST_EMAIL, email);
nvc.Add(POST_PASSWORD, password);

sResponse = System.Text.Encoding.ASCII.GetString(client.UploadValues(BASE_URL + ACTION_PAGE, nvc));

只要您的BASE_URL使用https://,就會加密所有數據( 進出服務器)。

IOW使用SSL / TLS從客戶端到服務器不要求客戶端做任何特殊的事情(使用證書),除了使用https://作為方案,因為操作系統提供您需要的所有內容(例如,受信任的根)保護數據傳輸。

當私鑰可用時, 客戶端證書有效。 使用.CER文件時,因為X.509證書包括私鑰這不是通常的情況。

確保私鑰可用的唯一安全方法是從PKCS#12文件加載證書,其中證書和私鑰都可用(即兩者都被導出到.pfx文件中)。

筆記:

  • 我之所以說通常是因為Windows / CryptoAPI有時會產生一些魔力 (當與X509Certificate一起使用時)並自動將證書與來自certificate.key存儲的私鑰相關聯。

  • 我說安全,因為這也適用於Mono,而不僅僅是MS .NET。

聽起來你正在倒退。 您應該在Web主機/服務器上安裝SLL證書。 然后,您創建Web服務器的Web請求,並需要HTTPS協議。

只需使用RDP連接到您的服務器即可

打開IE並轉到Internet選項

導航到“高級”選項卡並啟用“使用SSL 2.0和SSL 3.0”

現在,您的服務器請求將被驗證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM