SSL 握手失敗:11 種原因及修復方法
· CSR.plus 團隊

- •握手失敗幾乎總能歸結為 11 種原因之一:憑證、密碼套件、SNI、協定或網路層。
- •依序診斷:到期、主機名稱比對、鏈完整性,然後是 TLS 版本與密碼套件。
- •大多數握手失敗可透過正確的中級鏈或受支援的密碼套件修復。
握手失敗時實際發生了什麼
TLS 握手期間,用戶端與伺服器必須就協定版本、密碼套件與有效憑證鏈達成一致。任何一步失敗都會終止連線。常見失敗點包括:憑證過期、主機名稱不在憑證涵蓋範圍、鏈不完整(伺服器只傳送葉子憑證而不含中級憑證)、TLS 版本不受支援、密碼套件不匹配、缺少 SNI,或防火牆/NAT 丟棄了 ClientHello。
一分鐘內完成診斷
執行 openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 並閱讀輸出。"Verify return code: 0" 表示鏈正常。"unable to get local issuer certificate" 指向缺少中級憑證。"no peer certificate available" 或 CONNECTED 後空行表示伺服器從未完成握手——通常是協定或密碼套件問題。瀏覽器主控台錯誤補充用戶端視角。
5 種最常見原因的修復
1) 缺少中級憑證:下載 CA 套件,依正確順序拼接葉子憑證 + 中級憑證。2) 密碼套件不匹配:啟用通用套件如 TLS_AES_256_GCM_SHA384(TLS 1.3)或 ECDHE-RSA-AES256-GCM(TLS 1.2)。3) TLS 版本:在伺服器上啟用 TLS 1.2 與 1.3,停用低於 1.2 的版本。4) 主機名稱/SNI:確保憑證包含確切主機名稱且已啟用 SNI。5) 網路:檢查 443 連接埠是否開啟,確認負載平衡器或 CDN 沒有以自己的設定終止 TLS。
FAQ
為什麼瀏覽器握手失敗但 curl 可以?
不同用戶端支援的 TLS 版本與密碼套件不同。如果 curl 正常而舊瀏覽器失敗,表示用戶端不支援協商的 TLS 版本——請啟用 TLS 1.2 作為最低版本。
防火牆會導致握手失敗嗎?
會。某些防火牆與 NAT 裝置會靜默丟棄大型 ClientHello 封包或封鎖 TCP 連接埠。可用非標準連接埠測試或用封包擷取確認。
UptimeRobot
免費監控你的 SSL 與在線狀態
UptimeRobot 全天候監視你的憑證與端點——免費方案含 50 個監控。
聯盟連結——你無需多付任何費用,我們可能獲得佣金。
免費 SSL/TLS 工具
數秒內驗證並檢查你的憑證。