2016-07-14 74 views
1

在將我們的應用程序部署到我們的生產環境中之前,我們在.NET Web應用程序的較低環境中調用了一些數字API。承載這些API的那些服務器往往不具有由可信認證機構簽名的證書。ServicePointManager.ServerCertificateValidationCallback在Windows Server 2012 R2上不起作用

我創建了下面的代碼作爲一種解決方法,具有安全排除在我們的生產環境中運行這段代碼:

if (ignoreCertErrors && environmentName.ToLower() != "PROD") 
{ 
    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 
} 

兩個ignoreCertErrors和environmentName是提供包含此邏輯方法的參數。

這個工作對我的地方發展對話框(Windows 7),但是當我部署它到Windows 2012 R2的測試服務器,我對API的調用與證書未仍信任失敗,出現以下錯誤:

================================================= ================ 消息:底層連接已關閉:發送時發生意外錯誤 。堆棧跟蹤:
在System.Net.HttpWebRequest.EndGetResponse(IAsyncResult的asyncResult)
在System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResultar)

============== ================================================== = 消息:無法從傳輸連接讀取數據: 現有連接被遠程主機強制關閉。堆棧 跟蹤:
在System.Net.TlsStream.EndWrite(IAsyncResult的asyncResult)
在System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult的AR)

============== ================================================== = 消息:一個現有的連接被強制由遠程主機 堆棧跟蹤封閉:
在System.Net.Sockets.Socket.EndReceive(IAsyncResult的asyncResult)
在System.Net.Sockets.NetworkStream.EndRead(IAsyncResult的asyncResult)

================================================= ================

我是否需要更改此邏輯,或者做一些新的操作以忽略Windows Server 2012 R2上的證書警告?

+0

可能無關緊要,但是您的意思是environmentName.ToUpper()!=「PROD」? – jtmnt

+0

這是一個很好的結果,我們還沒有去生產。這並不能解決問題,因爲在任何情況下,它仍然是真的,所以代碼會執行。 – Josh

+0

服務器SSL3是啓用還是禁用? https://technet.microsoft.com/en-us/library/security/3009008.aspx。 https://www.digicert.com/ssl-support/iis-disabling-ssl-v3.htm – jtmnt

回答

0

我將以不同的方式處理這個問題,我創建了一個與錯誤消息相關的question並要求解決建議。

相關問題