SSL 失敗 - 將 HttpWebRequest 與客戶端證書一起使用時收到 SSL/TLS 異常
我有一個帶有 IIS 7 的 Windows 2008 伺服器,它使用 .NET C# 應用程序向 PayPal 發送請求以處理付款。幾個月前,我安裝了 Verisign 購買的證書。安裝後,我能夠執行我的 WebClient 程式碼以成功創建 SSL 連接,並通過 PayPal NVP API(名稱值對)處理付款。
最近,我在 SSL Transaction 期間收到錯誤消息。具體錯誤如下:
無法創建 SSL/TLS 安全通道
我已經檢查了我能想到的所有內容,並閱讀了 StackOverflow 和網路上其他地方的許多文章。
我找到的最好的資源是:
請求被中止:無法創建 SSL/TLS 安全通道
在這篇文章中查找錯誤http://support.microsoft.com/kb/915599 解析度 J。也可能是您沒有提供客戶端證書。這很可能是使用 TLS 或 SSL3 並且伺服器不理解它的問題。
這是我嘗試閱讀和實施他們的解決方案的所有其他資源的列表:
我嘗試過的各種連結:
http://support.microsoft.com/kb/901183
無法創建 SSL/TLS 安全通道 - 問題可能出在代理伺服器上嗎?
請求被中止:無法創建 SSL/TLS 安全通道 - 解密返回 SEC_I_RENEGOTIATE
http://forums.iis.net/t/1156690.aspx
我嘗試了以下解決方案:
- 重新安裝證書,並將其放入各個商店(個人、本地電腦)
- 添加了此 ServiceManager 程式碼:
ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
- 啟用日誌記錄以獲得更詳細的詳細資訊
- 上述連結中列出的各種其他解決方案
令人沮喪的是,幾個月前它工作得很好,現在我收到了這個錯誤。起初,我以為證書過期了,但似乎沒問題。
它可能是 Windows Server 的 Service Pack 或 Hotfix 創建了破壞 SSL 的新設置或方案。我認為重新安裝證書可以解決這個問題。
需要注意的是,當我重新安裝時,我只是將它添加到各個商店(點兩下證書並安裝)。我沒有創建“證書請求”。由於它已經安裝並綁定到我的 IIS 應用程序的 SSL 埠,它應該沒問題。
這是創建 Web 請求的程式碼:
public static Hashtable DoWebReq(string strNVP, string strNVPSandboxServer) { ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; string _strNVP = strNVP; //Create web request and web response objects, make sure you using the correct server (sandbox/live) var wrWebRequest = (HttpWebRequest)WebRequest.Create(strNVPSandboxServer); wrWebRequest.Method = "POST"; // POST var requestWriter = new StreamWriter(wrWebRequest.GetRequestStream()); requestWriter.Write(_strNVP); requestWriter.Close(); // Get the response. var hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse(); var responseReader = new StreamReader(wrWebRequest.GetResponse().GetResponseStream()); //and read the response string responseData = responseReader.ReadToEnd(); responseReader.Close(); string result = System.Web.HttpContext.Current.Server.UrlDecode(responseData); string[] arrResult = result.Split('&'); Hashtable htResponse = new Hashtable(); string[] responseItemArray; foreach (string responseItem in arrResult) { responseItemArray = responseItem.Split('='); htResponse.Add(responseItemArray[0], responseItemArray[1]); } return htResponse; }下面是一組螢幕截圖,展示了 SSL 機器的各種組件:
這是 IIS 中的 SSL 綁定設置:
以下是已安裝證書的概述:
這是我收到的錯誤:
已安裝證書:
證書詳情
任何有關修復此錯誤的建議將不勝感激。我考慮過但未解決的一些可能性是:
- 請求會花費太長時間嗎?它似乎足夠快……但我讀過這可能是一個問題。
- 在 Internet Explorer 中,我確實看到了綠色的“SSL 欄”,表明該站點已被驗證為安全。這告訴我證書安裝正確,這是真的嗎?
- 有沒有我可以使用某種 HTTP 請求執行的簡單測試來幫助縮小問題的根源?
- 這可能與PayPal有關嗎?貝寶是否有可能因為他們的憑據而拒絕請求?
- 實現ICertificatePolicy 介面對調試問題有幫助嗎?我希望我能修復它。
我認為 SSL 是否可以工作,它根本與 PayPal 沒有任何關係/依賴性……但我可能是錯的。
我覺得我應該能夠只使用由 WebClient 類建構的名稱值對 URL,並通過 IE 通過管道發送它並接收響應。
我認為問題可能不在您的客戶端證書中,而在 PayPal 中。
關於你的問題:
在 Internet Explorer 中,我確實看到了綠色的“SSL 欄”,表明該站點已被驗證為安全。這告訴我證書安裝正確,這是真的嗎?
不,這意味著 PayPal 的伺服器證書是由您的瀏覽器驗證的,即 PayPal 的證書是由添加為您的證書頒發機構的人簽名的。但是,PayPal 的證書不會添加到您的受信任證書中。
我還注意到,PayPal 目前的證書從 23.3.2011 開始有效。也許在那之前您的應用程序一直在工作,而現在它已更改,應用程序已停止工作。
基於此,我建議嘗試安裝 PayPal 自己的證書作為伺服器證書。





