如何修復解決“SSL握手失敗”報錯

錯誤型別:
安全相關錯誤
錯誤名稱:
SSL握手错误
英文名稱:
SSL Handshake Failed
錯誤描述:
SSL握手失败或错误525意味着服务器和浏览器无法建立安全连接。这可能由于多种原因而发生。

如何修復解決“SSL握手失敗”報錯

如今為網站設定安全套接字層 (SSL) 證書非常簡單。您可以免費生成證書,許多託管服務提供商甚至會為您設定。但是,如果您沒有正確配置您的證書,您可能會遇到諸如“SSL握手失敗”之類的錯誤。

如果您遇到“SSL握手失敗”錯誤訊息並且對它的含義感到困惑,那麼您並不孤單。這是一個常見的錯誤,它本身並不能告訴你太多。雖然這可能是令人沮喪的體驗,但好訊息是您可以採取一些簡單的步驟來解決問題。

當您的瀏覽器和伺服器無法建立安全連線時,會出現“SSL握手失敗”錯誤。

在這篇文章中,我們將解釋什麼是SSL Handshake Failed錯誤以及導致它的原因。然後,我們將為您提供幾種可用於修復它的方法。

  1. SSL握手簡介
  2. 瞭解導致SSL握手失敗的原因
  3. 如何修復SSL握手失敗錯誤

SSL握手簡介

在我們深入研究導致TLS或SSL握手失敗的原因之前,瞭解什麼是TLS/SSL握手會很有幫助。安全套接字層 (SSL)傳輸層安全性 (TLS)是用於驗證伺服器和外部系統(如瀏覽器)之間的資料傳輸的協議。

需要SSL證書才能使用HTTPS保護您的網站。我們不會太深入地討論TLS與SSL之間的區別, 因為它是次要的。這些術語經常互換使用,因此為簡單起見,我們將使用“SSL”來指代兩者。

除此之外,SSL握手是建立HTTPS連線過程的第一步。為了驗證和建立連線,使用者的瀏覽器和網站的伺服器必須經過一系列檢查(握手),從而建立HTTPS連線引數。

讓我們解釋一下:客戶端(通常是瀏覽器)向伺服器傳送安全連線請求。傳送請求後,伺服器會向您的計算機傳送一個公鑰,並根據證書列表檢查該金鑰。然後,計算機使用從伺服器傳送的公鑰生成金鑰並對其進行加密。

長話短說,沒有SSL握手,就不會建立安全連線。這會帶來重大的安全風險。此外,該過程涉及許多活動部件。

這意味著有很多不同的機會出現問題並導致握手失敗,甚至導致“您的連線不是私密連線”錯誤,從而導致訪問者離開。

您可能知道,SSL證書可以驗證您網站的“身份”。它使用瀏覽器檢查的加密金鑰來確保證書有效。建立連線後,您的瀏覽器可以解密伺服器傳送的內容。

這個過程稱為“握手”。以下是它更詳細的工作原理:

  1. 您訪問具有SSL證書的網站,並且您的瀏覽器傳送資料請求。
  2. 伺服器向瀏覽器傳送一個加密的公鑰。
  3. 您的瀏覽器檢查該金鑰並將其加密金鑰傳送回伺服器。
  4. 伺服器解密金鑰並將加密內容傳送回您的瀏覽器。
  5. 您的瀏覽器解密內容(從而完成握手)。

所有這一切都在幾秒鐘內發生。SSL證書和HTTPS協議使您的網站能夠安全地傳輸資料,而不會對效能產生負面影響。這使得SSL證書對任何網站都至關重要。但是,就像您網站的任何元素一樣,它有時會產生獨特的問題。

瞭解導致SSL握手失敗的原因

SSL握手失敗或錯誤525意味著伺服器和瀏覽器無法建立安全連線。這可能由於多種原因而發生。

通常,錯誤525表示使用Cloudflare的域與源Web伺服器之間的SSL握手失敗。

“SSL握手失敗”錯誤準確地告訴您問題是什麼。當您的瀏覽器無法與具有SSL證書的網站建立連線時,它會顯示:

ssl-handshake-failed

在這個來自使用Cloudflare的網站的示例中,您可以看到“SSL握手失敗”錯誤對應於“525”程式碼。因此,錯誤可能源於伺服器端和客戶端的問題。

但是,瞭解SSL錯誤可能發生在客戶端伺服器端也很重要。客戶端SSL錯誤的常見原因包括:

  • 客戶端裝置上的錯誤日期或時間。
  • 瀏覽器配置錯誤。
  • 被第三方攔截的連線。

一些伺服器端原因包括:

  • 密碼套件不匹配。
  • 伺服器不支援的客戶端使用的協議。
  • 不完整、無效或過期的證書。

通常,如果SSL握手失敗,問題可能是由於網站或伺服器及其SSL配置有問題。

該列表包括本地問題,與您網站的伺服器相關問題,一個特定於第三方服務的問題。在接下來的部分中,我們將探討如何解決每個問題。

如何修復SSL握手失敗錯誤

“SSL握手失敗”錯誤背後有幾個潛在原因。因此,當涉及到如何修復它時,沒有簡單的答案。

幸運的是,您可以使用一些方法來開始探索潛在問題並一一解決。讓我們看一下可用於嘗試修復SSL Handshake Failed錯誤的五種策略。

  1. 更新您的系統日期和時間
  2. 檢查您的SSL證書是否有效
  3. 為您的瀏覽器配置最新的SSL/TLS協議支援
  4. 驗證您的伺服器是否已正確配置為支援SNI
  5. 確保密碼套件匹配

1. 更新您的系統日期和時間

當您的瀏覽器嘗試建立SSL握手時,它會根據您計算機的日期和時間驗證證書。它這樣做是為了驗證SSL證書是否仍然有效。

如果您本地裝置的日期和時間關閉,則可能會導致驗證過程中出現錯誤(即沒有握手)。幸運的是,這是一個簡單修復的問題。

在Windows裝置上,開啟開始 選單並輸入日期和時間設定。選擇出現的選項,會彈出一個新視窗。啟用設定自動設定時間,並確保您的時區正確:

set-time-automatically

驗證您的日期現在是否正確,然後嘗試重新載入網站。

以下是在其他作業系統 (OS) 上修復日期和時間的方法:

如果在本地裝置上修復日期和時間不起作用,您可以繼續進行下一個修復。

2. 檢查您的SSL證書是否有效

SSL證書上標有到期日期,以幫助確保其驗證資訊保持準確。通常,這些證書的有效期為六個月至兩年。

如果SSL證書被吊銷或過期,瀏覽器將檢測到這一點並且無法完成SSL握手。如果您在網站上安裝SSL證書已經超過一年左右,那麼可能是時候重新頒發它了。

要檢視SSL證書的狀態,您可以使用SSL證書檢查工具 ,例如Qualys提供的工具:

Qualys網站上的SSL伺服器測試工具

Qualys網站上的SSL伺服器測試工具

該工具既可靠又免費使用。您需要做的就是在Hostname欄位中輸入您的域名 ,然後單擊Submit。一旦檢查器完成對您網站的SSL配置的分析,它將為您提供一些結果:

 

Qualys SSL檢查工具的結果頁面

Qualys SSL檢查工具的結果頁面

在此頁面上,您可以檢視您的證書是否仍然有效,並檢視它是否因任何原因被吊銷。

在任何一種情況下,更新您的SSL證書都應該可以解決握手錯誤(這對於確保您的網站和WooCommerce商店的安全至關重要)。

3. 為您的瀏覽器配置最新的SSL/TLS協議支援

有時,確定問題根本原因的最佳方法是消除過程。正如我們前面提到的,SSL握手失敗通常是由於瀏覽器配置錯誤而發生的。

確定特定瀏覽器是否存在問題的最快方法是嘗試切換到其他瀏覽器。這至少可以幫助縮小問題範圍。您也可以嘗試禁用任何外掛並將瀏覽器重置為預設設定。

另一個潛在的與瀏覽器相關的問題是協議不匹配。例如,如果伺服器僅支援TLS 1.2,但瀏覽器僅配置為TLS 1.0或TLS 1.1,則沒有相互支援的協議可用。這將不可避免地導致SSL握手失敗。

如何檢查此問題是否發生取決於您使用的瀏覽器。作為一個例子,我們將看看這個過程在Chrome中是如何工作的。首先,開啟瀏覽器並轉到設定 > 高階。這將擴充套件許多選單選項。

在“系統 ”部分下,單擊“開啟計算機的代理設定”

Google Chrome中的系統設定頁面

Google Chrome中的系統設定頁面

這將開啟一個新視窗。接下來,選擇高階選項卡。在安全部分下,檢查是否選中了使用TLS 1.2旁邊的框 。如果沒有,請檢查該選項:

Windows中的Internet屬性高階設定

Windows中的Internet屬性高階設定

還建議您取消選中SSL 2.0和SSL 3.0的覈取方塊。

這同樣適用於TLS 1.0和TLS 1.1 ,因為它們正在被淘汰。完成後,單擊“ 確定” 按鈕,然後檢查握手錯誤是否已解決。

請注意,如果您使用的是Apple Safari或Mac OS,則沒有啟用或禁用SSL協議的選項。預設情況下會自動啟用TLS 1.2。如果您使用的是Linux,您可以參考Red Hat guide on TLS hardening

4. 驗證您的伺服器是否正確配置為支援SNI

SSL 握手失敗也可能是由不正確的伺服器名稱指示 (SNI) 配置引起的。SNI使Web伺服器能夠為一個IP地址安全地託管多個TLS證書。

伺服器上的每個網站都有自己的證書。但是,如果伺服器未啟用SNI,則可能導致SSL握手失敗,因為伺服器可能不知道要提供哪個證書。

有幾種方法可以檢查網站是否需要SNI。一種選擇是使用我們在上一節中討論過的Qualys的SSL伺服器測試。輸入您網站的域名,然後單擊提交按鈕。

在結果頁面上,查詢顯示“This site works only in browsers with SNI support”的訊息:

Qualys SSL檢查器工具的摘要結果頁面

Qualys SSL檢查器工具的摘要結果頁面

另一種檢測伺服器是否使用SNI的方法是瀏覽“ClientHello”訊息中的伺服器名稱。這是一個技術性更強的過程,但它可以提供很多資訊。

它涉及檢查“server_name”欄位的擴充套件hello標頭,以檢視是否提供了正確的證書。

如果您熟悉使用OpenSSL工具包 和Wireshark等工具,您可能會發現此方法更可取。您可以使用openssl s_client或不使用該-servername選項:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# without SNI
$ openssl s_client -connect host:port
# use SNI
$ openssl s_client -connect host:port -servername host
# without SNI $ openssl s_client -connect host:port # use SNI $ openssl s_client -connect host:port -servername host
# without SNI
$ openssl s_client -connect host:port 
# use SNI
$ openssl s_client -connect host:port -servername host

如果您獲得了兩個同名的不同證書,則意味著SNI受支援且配置正確。

但是,如果返回的證書中的輸出不同,或者沒有SNI的呼叫無法建立SSL連線,則表明需要SNI但未正確配置。解決此問題可能需要切換到專用IP地址。

5. 確保密碼套件匹配

如果您仍然無法確定SSL握手失敗的原因,則可能是由於密碼套件不匹配。如果您不熟悉該術語,“密碼套件”是指一組演算法,包括用於金鑰交換、批量加密和訊息身份驗證程式碼的演算法,可用於保護SSL和TLS網路連線。

如果伺服器使用的密碼套件不支援或不匹配Cloudflare使用的密碼套件,則可能導致“SSL握手失敗”錯誤。

在確定是否存在密碼套件不匹配時,Qualys的SSL伺服器測試再次證明是一個有用的工具。

當您輸入您的域並單擊提交時,您將看到一個摘要分析頁面。您可以在“Cipher Suites ”部分下找到密碼資訊:

Qualys SSL報告中的密碼套件部分

Qualys SSL報告中的密碼套件部分

您可以使用此頁面來發現伺服器支援的密碼和協議。您需要注意任何顯示“弱”狀態的內容。此外,本節還詳細介紹了密碼套件的具體演算法。

要更正此問題,您可以使用您的瀏覽器工具的Qualys SSL/TLS功能將結果與您的瀏覽器支援的內容進行比較。有關密碼套件的更多資訊和指導,我們還建議檢視ComodoSSLStore指南

小結

最令人困惑但最常見的SSL相關問題型別之一是“SSL握手失敗”錯誤。處理此錯誤可能會帶來壓力,因為它有許多潛在原因,包括客戶端和伺服器端問題。

但是,您可以使用一些可靠的解決方案來識別問題並加以解決。您可以使用以下五種方法來修復SSL Handshake Failed錯誤:

  1. 更新您的系統日期和時間。
  2. 檢查您的SSL證書是否有效(必要時重新頒發)。
  3. 配置您的瀏覽器以支援最新的TLS/SSL版本。
  4. 驗證您的伺服器是否已正確配置為支援SNI。
  5. 確保密碼套件匹配。

評論留言