2008-11-13 58 views
1

嗨,我遇到了試圖發佈Https下WebRequest的問題。無法在.net中發佈https WebRequest?

我收到以下錯誤

1.-基礎連接已關閉:無法連接到遠程服務器。

2.-超時

3-基礎連接已關閉操作:無法建立SSL/TLS安全通道。

我試圖用我公司的約3或4個不同的代理和客戶的公司,甚至沒有當我直接是與沒有任何限制的ISP供應商,我執行下面的方法

WebRequest.GetRequestStream() 
當得到上面的錯誤

這發生在代理的後面,請求只能從代理後面的一臺PC上成功發佈。該代理沒有安裝客戶端證書。

這是在.net框架1.1和 請求已包含網絡憑據。

可能是什麼?

更新

內部異常的第三個錯誤是: 成功完成該功能,但必須再次調用根據iisper.h documentation這個錯誤屬於

完成上下文

// 
// MessageId: SEC_I_CONTINUE_NEEDED 
// 
// MessageText: 
// 
// The function completed successfully, but must be called 
// again to complete the context 
// 
#define SEC_I_CONTINUE_NEEDED   ((HRESULT)0x00090312L) 

MSDN這是指

SEC_I_CONTINUE_NEEDED 客戶端必須將輸出令牌發送到服務器並等待返回令牌。然後返回的標記在另一個調用中傳遞給InitializeSecurityContext(Schannel)。輸出令牌可以是空的。

這是否意味着PC沒有客戶端證書?

回答

1

有一個整體許多事情可複雜的事情,只要與SSL證書不一致,等等。但首先,你應該做一些基本的調試,以排除明顯的事情:

- 您是否嘗試向其他服務器發送簡單的Web請求?嘗試兩個(不安全)http和(安全)https:

- 你嘗試從另一臺計算機,或從另一個網絡連接?你提到客戶端是在代理之後的;先嚐試一臺不帶代理的計算機,然後排除。

- 您是否在會話中創建多個WebRequest?對打開的請求數量有嚴格限制,因此請確保在獲得WebResponse後關閉它們。也許只需要一個請求就可以製作測試程序。

如果沒有縮小範圍,那麼它可能是更復雜的東西,與他們的服務器或代理。您可以使用諸如netshark之​​類的程序跟蹤傳出的網絡數據包,以嘗試追蹤事情陷入困境的地方。

0

SSL證書名稱可能不匹配。自簽名證書通常是這種情況。

解決方案是編寫自己的身份驗證例程,您可以始終返回true或執行必要的身份驗證以確保證書有效。

// .NET 2.0+ 
... 
ServicePointManager.ServerCertificateValidationCallback += MyValidationCallback 
... 
public bool MyValidationCallback(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors err) 
{ 
    return true; 
} 

// .NET 1.1 
public class MyCertificatePolicy : ICertificatePolicy 
{ 
    public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) 
    { 
    return true; 
    } 
} 
... 
ServicePointManager.CertificatePolicy = new MyCertificatePolicy(); 
... 
+0

該帖子只能由一臺計算機制作,因此這意味着該ssl證書是正確的。 – 2008-11-13 07:00:34

+0

我已經試過這個,但是在調試時它並沒有停在CheckValidationResult上,所以我的猜測是在握手過程中出現了問題 謝謝 – 2008-11-13 21:30:07

+0

在C#2.0+上,表達這個最簡單的方法是:`ServicePointManager.ServerCertificateValidationCallback + = delegate {返回true; };` – 2010-01-11 16:06:35

1

您可以使用Fiddler或網絡數據包嗅探工具(如Ethereal Whireshark)在其正在工作的計算機上以及其他某臺計算機上跟蹤HTTP流量,並比較結果。這是相當低級的,但可能會對此問題提出一些看法。

1
  • 如果您可以從不同的計算機Telnet到443,那麼它不是前兩個,因爲這意味着客戶端計算機正在該端口上接收請求。

在Windows上,這將是

telnet <domainname> 443 

,如果它連接的屏幕將變爲空白(打回了幾次退出)

  • 的代理可能會或可能不會實際如果您的請求處於HTTPS下,請關心您的請求,因爲它們無法讀取它。

  • 其他機器是否安裝了客戶端證書和證書鏈?