2010-12-20 128 views
3

我的公司開發了一個.NET Web服務和一個使用該Web服務的客戶端DLL。 web服務通過ssl託管在我們的服務器上,證書由GoDaddy提供並簽名。我們有一些託管環境中的客戶端在客戶端DLL嘗試訪問我們的Web服務時收到以下錯誤消息。WebException無法建立SSL/TLS安全通道的信任關係

System.Net.WebException基礎連接已關閉:無法爲SSL/TLS安全通道的信任關係。

我們的修復方法是讓他們在服務器上打開IE,這對很多託管服務都是一項挑戰,並轉到WSDL URL。 IE然後用安全警報對話框提示他們。它表示認證日期有效,並且有效的名稱與該頁面的名稱相匹配,但由您沒有選擇信任的公司頒發。當他們單擊是繼續時,客戶端DLL可以成功連接到Web服務並正常運行。

沒有人有任何想法,爲什麼GoDaddy的不會一直在那裏有效的發佈者列表?我們運行的所有服務器都有GoDaddy作爲有效的權限。我猜,出於安全原因,他們已經卸載了GoDaddy的權限,但並不完全相信沒有其他潛在的問題。

不幸的是,我沒有多少運氣試圖在本地重新創建。如果我進入Internet選項並刪除GoDaddy權限並啓動我們的服務,那麼ssl工作得很好。我回到發佈商列表中,GoDaddy得到了迴歸。所以我的第二個問題是,你是如何擺脫GoDaddy,以便我可以得到一個無效的證書警告?

好的,最後一個問題。有沒有代碼的方式,我可以告訴Web服務忽略無效的證書。我見過一些關於WCF而不是以前的Web服務進行編程的文章。

+0

是解決所嚴格按照要求的安全證書的DNS?即:'https:// wsdl.companydomain.local'或SSL證書中指定的任何內容。 – 2010-12-20 18:45:28

+0

我相信是的。我在這裏驗證了我們的證書,http://www.sslshopper.com/ssl-checker.html,並且一切都檢查完好。 – 2010-12-20 18:53:34

+0

您一次提問的次數太多。本地計算機和服務器計算機上的受信任根證書列表是一種謹慎保護的資源,不會經常更新。任何人都可以創建新的根證書。 GoDaddy可能已經創建了不在Microsoft通訊組列表中的其他根證書,並且您的SSL證書由其中一個簽名。也有可能用於簽署SSL證書的根證書已被入侵併置於「不信任」列表中,這意味着您的SSL證書不可信。 – dthorpe 2010-12-20 19:05:25

回答

4

您可能需要在服務器上安裝用於簽署SSL證書的中間證書。

瀏覽器將嘗試通過檢查簽署的SSL證書的證書鏈的驗證,驗證SSL證書。如果服務器不提供帶SSL證書的證書鏈,瀏覽器可能會拒絕SSL證書。 (Firefox比IE更多的問題)。根證書必須仍然安裝在客戶端計算機上才能工作。

+0

我並不是說你錯了,但似乎瀏覽器不應該向服務器詢問它的根證書列表......這似乎是一個巨大的安全漏洞。此外,這聽起來像有問題的機器不相信GoDaddy作爲CA.這意味着瀏覽器沒有列出GoDaddy的受信任根權限列表。唯一的方法是通過微軟更新或手動信任它。 – NotMe 2010-12-20 19:00:42

+0

@Chris:SSL安裝中的一個常見問題是服務器僅返回葉節點證書,而沒有指示證書鏈。 IE瀏覽器通常會接受這樣的證書,但Firefox不會。安撫Firefox的解決方案是確保您的中間證書在服務器上可用。你可能對根證書是正確的 - 我已經編輯了答案。 – dthorpe 2010-12-20 19:09:05

+0

看起來好多了。+1 – NotMe 2010-12-20 19:14:52

1

這實際上更像是一個serverfault問題,但我會在這裏添加我能做的。

Windows機器通常信任的根證書頒發機構列表會定期更新。這是作爲Windows更新到IE瀏覽器。你可以看到MSDN for more information

如果您的客戶沒有打開Windows更新或者主動忽略Windows更新,這對於很多IT部門來說非常普遍,那麼除了交換機SSL提供商之外,您可以做的不多。

基本上,他們需要獲得該證書的更新,或者你需要切換到一個已經被有問題的機器信任的概率高的證書提供商。通常這意味着VerisignThawte。第三種選擇是你一直沿着的路線:讓他們手動信任根CA.

在這一天結束時,我討厭這種方式,只是因爲所涉及的IT部門是白癡,但真正的問題歸結爲你的公司想怎麼處理這個不斷變化的應用程序的想法。

1

當您在Web服務器上查看該證書的Go Daddy認證路徑時,您是否看到Go Daddy Class xxx或Starfield Class xxx?

從您的非傳統客戶端,即Windows Vista向上,Go Daddy認證路徑顯示什麼?去爸爸班xxx或星際班xxx?

而這些客戶端得到警告,他們是傳統客戶端嗎?即WinXP和更舊?

根證書更新的作用與Windows Vista不同。在Windows Vista上

http://support.microsoft.com/kb/931125

的根證書,後來通過自動根更新機制分佈 - 即每根證書。當用戶訪問安全網站(通過使用HTTPS SSL),讀取安全電子郵件(S/MIME)或下載已簽名的ActiveX控件(代碼簽名)並遇到新的根證書時,Windows證書鏈驗證軟件檢查Microsoft Update的根證書。如果發現它,它會下載包含本程序中所有受信任根證書列表的當前證書信任列表(CTL),並驗證是否在那裏列出了根證書;然後它將指定的根證書下載到系統並將其安裝到Windows受信任的根證書頒發機構存儲中。

您可能會發現Web服務器上的Go Daddy認證路徑認爲它是Starfield Class 2而不是Go Daddy Class 2,因此您安裝了錯誤的根證書。它引起了我的注意,因爲當您在Web服務器上查看時,它不會顯示根證書警告,請下載並安裝Do Daddy class 2 root cert並刪除Starfield one,並且您的問題應該消失。

21

我通過調用Web方法之前加入這一行修正了這個錯誤:

System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; }; 
+1

儘管這不是理想的解決方案,但如果您使用的是無效的ssl(在某些情況下可能無法避免),這可能是一種可接受的解決方法,讓您瞭解您正在做的事情。 – 2014-02-18 04:09:14

+1

這不可能是一個解決方案,除非您添加自定義邏輯來驗證您的證書。你不能只接受產品中的任何證書。如果您忽略了證書驗證並接受任何證書,則使用SSL/TLS毫無意義。 – 2015-08-04 14:50:35

+0

同意麥克斯關於不在prod中這樣做的評論,但這個解決方案爲我節省了時間,只用於我正在使用的僅供內部使用的實用程序。小心一點。 – BitsEvolved 2016-05-12 15:25:47

2

VB.NET相當於是

System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(senderX, certificate, chain, sslPolicyErrors) 
                      Return True 
                     End Function 
相關問題