適用於節點使用一般 TLS,且用戶端日誌出現握手失敗或 x509 憑證錯誤的情況。依序檢查「日誌原文 → 系統時間 → 連線位址與 SNI → 憑證鏈 → 用戶端欄位」,區分網路逾時與憑證驗證失敗;維持憑證驗證開啟,逐項修改後再從日誌確認結果。
先分辨憑證錯誤與連線失敗
「TLS 握手失敗」描述的是連線階段,並非單一原因。用戶端先連上節點位址與連接埠,再進行 TLS 協商及憑證驗證,之後才會進入代理協定的互動。連線逾時、伺服器主動中斷、憑證網域不符,都可能被上層統稱為連線失敗。排查時應展開核心日誌,查看錯誤鏈最末層,而不是只看測速清單中的失敗標記。
v2rayN 可在主畫面的日誌區查看這次連線記錄;v2rayNG 與 v2flyNG 可從主選單的日誌入口查看。不同版本的選單名稱可能不同。先記下用戶端版本、核心名稱、傳輸方式及完整錯誤,再只對一個節點發出一次請求,避免多個背景連線的日誌混在一起。
錯誤:x509: certificate has expired or is not yet valid
原因:驗證時間不在憑證有效期限內,可能是裝置時間有誤,也可能是伺服器憑證確實已過期。解法:先同步裝置時間,再對照日誌中的目前時間與憑證有效期限;若仍報錯,請伺服器端更新憑證並重新載入。
錯誤:x509: certificate signed by unknown authority
原因:憑證無法串接至受信任的根憑證,常見原因包括缺少中繼憑證、使用自簽憑證或連線遭到替換。解法:檢查伺服器端的完整憑證鏈及裝置信任存放區,核對簽發者;不要以停用驗證取代修復。
錯誤:tls: first record does not look like a TLS handshake
原因:目標連接埠傳回的不是預期 TLS 資料,可能連到了明文服務。解法:核對節點連接埠、傳輸安全設定及反向代理的監聽設定。
錯誤:context deadline exceeded
原因:操作超過時限,單看這行無法判定憑證有問題。解法:搭配前後日誌檢查網域解析、TCP 是否可連,以及目前的握手階段;先不要修改憑證選項。
系統時間:先同步,再判斷憑證是否過期
憑證包含生效時間與到期時間。裝置時鐘太早可能觸發「尚未生效」,太晚則可能顯示「已過期」。只切換時區通常不會改變實際的系統時間戳;需要校正的是實際日期與時間。雙系統切換、長時間關機後開機,或自動時間同步失敗,都應優先檢查。
-
同步時間
Windows 11:開啟「設定」→「時間與語言」→「日期與時間」,啟用「自動設定時間」,再於「其他設定」中點選「立即同步」。若同步失敗,請先確認裝置網路連線正常。
-
確認其他裝置
macOS:前往「系統設定」→「一般」→「日期與時間」,啟用自動設定日期與時間。Android:前往系統「設定」→「系統」→「日期與時間」,啟用自動設定時間;部分廠牌的系統會將此選項放在「更多設定」。
-
重新建立連線
同步時間後,停止並重新啟動用戶端連線,記錄新產生的錯誤。不要用校正時間前的舊日誌判斷修復是否有效。
-
檢查憑證期限
若裝置時間正確,仍提示憑證過期,請檢查實際收到的憑證有效期限。憑證更新後,還需要讓 TLS 終止服務重新載入;磁碟上的新檔案不代表目前連線已使用新憑證。
連線位址、SNI 與 Host 不可混為一談
節點編輯頁中的「位址」決定連線目標;SNI 是 TLS ClientHello 中送出的伺服器名稱,伺服器常依此選擇憑證;WebSocket 的 Host 則屬於握手後的 HTTP 要求標頭。三者可能使用相同網域,也可能不同,但必須符合伺服器設定,不能把「偽裝網域」當成可任意更換的裝飾欄位。
| 設定項目 | 作用階段 | 檢查重點 |
|---|---|---|
| 位址與連接埠 | 建立網路連線 | 使用伺服器提供的入口;網域解析結果應指向預期服務。 |
serverName / SNI | TLS 握手 | 填入憑證涵蓋的伺服器名稱,不含通訊協定、連接埠或路徑。 |
| WebSocket Host | HTTP 升級要求 | 符合反向代理的虛擬主機設定;不能取代 TLS 的 SNI。 |
| WebSocket path | HTTP 路徑比對 | 使用伺服器指定的路徑;路徑錯誤通常不是憑證網域錯誤。 |
allowInsecure | 憑證驗證 | 一般公開憑證情境請維持 false。 |
以保留供文件說明的網域 edge.example.com 為例:如果憑證的 Subject Alternative Name 包含此名稱,SNI 就應填入這個主機名稱,而不是 https://edge.example.com/path。透過 IP 連線時,也可以明確指定伺服器要求的網域作為 SNI。若直接以 IP 驗證,憑證必須包含相符的 IP 位址項目,只有網域項目並不足夠。
判斷方式:依伺服器參數核對,不要用連接埠猜測協定
連接埠號碼只是慣例。先確認節點實際啟用了標準 TLS,再核對 SNI 與憑證網域;只修改 WebSocket Host,無法修正發生在 HTTP 要求之前的憑證名稱錯誤。
用戶端中 SNI 與 allowInsecure 的檢查位置
介面名稱會隨版本變動,以下以節點編輯入口及實際欄位作為定位依據。訂閱匯入的參數也可能在更新時被覆寫,修改前建議複製一個節點供排查,並記下原始值。不要在同一次測試中同時修改位址、連接埠、SNI 和傳輸方式,否則即使恢復連線,也難以判斷原因。
- v2rayN:在主畫面雙擊目標節點,開啟伺服器編輯視窗。檢查「位址」與「連接埠」,再查看傳輸層安全相關區域中的
tls、「SNI」及「跳過憑證驗證」或「允許不安全連線」選項。一般 TLS 情境下,後者應關閉。若使用自訂設定,請以實際載入的 JSON 為準;一般編輯視窗不一定會修改該檔案。 - v2rayNG:在節點清單中點選目標節點的編輯圖示,往下查看 TLS 設定。確認傳輸層安全性為
tls,核對「SNI」與「允許不安全連線(allowInsecure)」;若使用 WebSocket,請另外檢查傳輸設定中的 Host 和 path。此用戶端使用 Xray 核心,REALITY 節點應依對應欄位排查。 - v2flyNG:從節點清單進入編輯頁,檢查 TLS、伺服器名稱或 SNI,以及允許不安全連線選項。此用戶端使用 v2fly 核心,不應照搬 Xray 專用的安全設定;若目前編輯頁沒有對應欄位,請核對節點類型與使用的版本,不要改把值填入 Host。
以下是一般 TLS 的 streamSettings 設定片段,用來辨識欄位,並非完整節點設定。範例使用 TCP 傳輸,網域僅供說明;現有節點若使用 WebSocket 或其他傳輸方式,不要為了照抄範例而改成 TCP。最終支援的欄位仍以實際執行的核心為準。
{
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "edge.example.com",
"allowInsecure": false
}
}
}
憑證鏈與 SNI:透過獨立握手縮小問題範圍
若環境中有終端機工具,可在同一部裝置、同一個網路下獨立檢視伺服器傳回的憑證。以下指令需在系統已安裝 OpenSSL 的情況下使用;執行前請將範例主機名稱、SNI 與連接埠替換為實際參數。連線位址與 SNI 分開指定,特別適合檢查「透過 IP 連線、以網域驗證」的設定。
openssl s_client -connect edge.example.com:443 -servername edge.example.com -showcerts -verify_hostname edge.example.com -verify_return_error
- 先確認是否收到憑證:若連線建立前就逾時,應先檢查網路、DNS、連接埠及防火牆;沒有憑證輸出不代表憑證已過期。
- 接著檢查名稱與期限:查看傳回憑證中的網域項目、生效時間與到期時間。若 SNI 選到預設站點的憑證,請核對伺服器端的虛擬主機設定及憑證綁定。
- 檢查憑證鏈:伺服器通常應傳送葉憑證及必要的中繼憑證,根憑證則由用戶端的信任存放區提供。瀏覽器能連線,不代表所有核心都能建立相同的信任鏈。
- 比較信任環境:OpenSSL 與用戶端核心可能使用不同的信任存放區。指令成功只能證明該工具在目前目標及參數下的結果,不能取代用戶端重新測試。
若只有在某個網路中收到簽發者不同的憑證,請檢查該網路是否有 HTTPS 檢查、入口網站登入或流量轉送。不要從錯誤彈出視窗中任意安裝未知的根憑證。若伺服器由他人管理,提供去識別化的錯誤末行、發生時間、SNI 與連接埠即可;不要附上完整訂閱網址、UUID 或其他憑證資料。
常見問題與修復後驗收
開啟 allowInsecure 就能連線,可以一直開著嗎?
這只能表示一般憑證驗證環節值得優先檢查,不代表已確認問題出在網域。請同步時間,核對 SNI、憑證有效期限及完整憑證鏈;修復後關閉此選項,再實際發出要求確認。
瀏覽器能開啟節點網域,為什麼用戶端仍然報錯?
先核對兩者是否連到相同位址、連接埠與 SNI。瀏覽器可能使用不同代理,或解析至不同入口,所使用的信任存放區也可能不同。請以用戶端實際連線及收到的憑證為準。
訂閱更新後 SNI 又還原了,該怎麼辦?
保留獨立的測試副本,確認修改確實有效後,聯絡訂閱提供者修正下發參數。每次更新後都核對原節點,避免把自動覆寫誤認為用戶端沒有儲存設定。
節點使用 REALITY,也要檢查這些 TLS 項目嗎?
先確認 security 的實際值。REALITY 不能直接套用一般 TLS 的憑證修復流程,應核對伺服器要求的 serverName、公鑰和 shortId 等對應參數;不要改成一般 TLS,也不要為了碰運氣而啟用略過驗證。
修改完成後,先儲存節點並重新啟動連線,再用相同的要求重新測試。驗收時不能只看延遲數字:日誌中不應再出現原本的憑證錯誤,實際要求也應能完成;一般 TLS 節點仍須維持憑證驗證開啟。若握手通過後出現路徑錯誤、HTTP 狀態碼異常或協定驗證失敗,應改查傳輸路徑與帳戶參數,不要再反覆修改 SNI。