2015-07-10 34 views
2

我知道有severalthreadsaboutthis,但我認爲我的情況可能會有所不同。隨機扔「無法建立SSL/TLS安全通道的信任關係」

我們的應用程序需要向2個HTTPS URL發送請求:其中一個是ReCaptcha服務,另一個是來自巴西的政府服務(如果您來自巴西,可能您知道SEFAZ和NF-e意味着什麼:D )

有時,兩者都停止工作。正如標題所述,例外是「無法建立SSL/TLS安全通道的信任關係」。當他們中的一個開始拋出異常時,另一個開始拋出異常,反之亦然:當其中一個工作時,另一個工作。

一切都很好,直到幾天前,當這個異常開始隨機拋出。我們的生產服務器和我們的內部開發服務器中都會出現此異常。

因此,有兩種服務(ReCaptcha和這種政府服務)在兩個服務器中顯然同時停止工作,顯然是隨機的。他們停止工作,然後再次開始工作。

兩種情況下的CA根都不相同。一個使用GeoTrust Global CA,另一個使用ICP-Brasil。

Based on this thread,我們認爲時鐘是錯的,但它顯然不是。我們經常檢查它。

我知道這個解決方案:

ServicePointManager.ServerCertificateValidationCallback = 
    ((sender, certificate, chain, sslPolicyErrors) => true); 

但它看起來並不很安全我。使用這些解決方案有問題嗎?

我們也可以使用這樣的:

ServicePointManager.ServerCertificateValidationCallback = 
    ((sender, cert, chain, errors) => cert.Subject.Contains("ServerName")); 

但我們真的很好奇,爲什麼這個異常拋出顯然隨機。如果我們不以「適當」的方式解決問題,我們可能會使用它。

所以,我們用完了想法。我們的服務在Windows Server 2008R2和IIS 7.5上運行。我還應該尋找什麼?

+1

聽起來更像是一個臨時性的網絡問題。有關ssl的異常消息可能是一條紅色鯡魚。在發生這種情況時,您是否檢查了端點之間的連通性? – Kevin

+0

我們沒有檢查過它......好吧,它可能是。我會盡力去做。謝謝! –

回答

3

ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);

但它看起來並不很安全我。使用這些解決方案有問題嗎?

嚴姆,是!有了這個,你允許服務器與任何證書作爲你認爲你在說話的服務器。

也是一樣的:

ServicePointManager.ServerCertificateValidationCallback = 
((sender, cert, chain, errors) => cert.Subject.Contains("ServerName")); 

僅在驗證Subject是不夠的在這裏。您至少應該在此處應用更多條件,例如GetSerialNumberString(),GetPublicKeyString()GetCertHashString()來驗證證書的正確性。 但恕我直言:不要在現場環境中這樣做 - 永遠不要! - 僅用於開發和測試目的。

關於主要錯誤 - this answer you already linked的一部分可能是問題的原因: 當兩個證書同時停止工作時,這很可能是證書鏈的問題。鏈中的一部分,證書使用可能不可用,由於此信任鏈被破壞,並且安全通道無法建立。

據我所知,您應該可以覆蓋ServerCertificateValidationCallback,記錄證書鏈,and still return the basic validation afterwards。這會讓你更接近錯誤來源。

+1

謝謝!我們記錄了這些錯誤,顯然我們的防火牆有時只是將它的證書放在CA根目錄上,而不是正確的。 –

相關問題