2017-03-23 79 views
0

我有一個c#應用程序,它在嘗試將文件保存到遠程SharePoint服務器時產生錯誤「請求已中止:無法創建SSL/TLS安全通道」。這發生在Windows 2012服務器上,但應用程序從我的桌面Windows機器成功運行。C#應用程序無法建立SSL/TLS連接

此外,從開發服務器,我可以連接到帶有IE11的SharePoint服務器,只啓用TLS 1.1。

該應用程序啓用了所有安全協議。

我也知道應用程序永遠不會調用certificatevalidationcallback函數。

鑑於這些症狀,有沒有人有任何想法可能會出錯?

+0

您可能想嘗試使用OpenSsl連接到您的服務器並啓用詳細日誌記錄,並查看是否成功通過Windows 2012 Server。 – Jinish

+0

經過相當多的實驗後,我找到了解決方案,但我仍然感到困惑。該解決方案原來是使用 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11; 這並不奇怪。令人驚訝的是,當我收到錯誤時,我正在使用 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12; II認爲允許任何一種協議都沒有缺點。 –

回答

0

經過相當多的實驗後,我找到了解決方案,但我仍然感到困惑。該解決方案原來是使用

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11;

這並不奇怪。令人驚訝的是,當我收到錯誤時,我正在使用

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;

我指定了兩個協議,因爲我不確定遠程服務器正在使用哪個協議,我認爲允許任一協議沒有缺點。

現在我想知道爲什麼允許第二個協議導致應用程序無法建立安全通道。

+0

我可以想到兩種可能性。一個是Web服務器行爲不當,而不是談判較低的協議。一些服務器提供了他們不明白的TLS版本而不是選擇較低的TLS版本。第二種可能性是TLS 1.2協商,但TLS 1.2不能選擇密碼套件。例如,客戶可能會說「RC4可以與TLS 1.1或更低版本一起使用」,而服務器僅支持RC4。 – vcsjones

+0

優秀的建議:謝謝。 –