V2Ray TLS 交握失敗排解:系統時間、SNI 設定與 allowInsecure 注意事項

整理 TLS 與憑證錯誤的常見原因:裝置時間不同步、SNI 與偽裝網域不符、指紋設定錯誤,並說明為何不建議長期略過憑證驗證。

本文重點

適用於 v2rayN、v2rayNG 或 v2flyNG 記錄中出現 TLS、x509、交握中斷等狀況。先根據原始錯誤分辨連線逾時與憑證驗證失敗,再依序檢查系統時間、節點位址與 SNI、憑證鏈、指紋及傳輸參數。一般 TLS 和 REALITY 應分開排查;略過憑證驗證無法取代設定修正。

一、先看記錄:交握失敗不一定是憑證錯誤

TLS 位於建立連線與代理協定通訊之間。節點位址解析失敗、TCP 連接埠無法連線,或伺服器關閉連線,都可能讓用戶端最後顯示「連線失敗」。只有記錄明確出現憑證有效期限、主機名稱或信任機構相關錯誤時,才應優先檢查憑證。單獨一行 EOF 或 context deadline exceeded 不足以判斷根本原因。

在 v2rayN 主畫面的記錄區重現一次連線,記下錯誤時間,並往前查看同一連線的內層錯誤;Android 用戶端可從選單中的「記錄」查看。不同版本的記錄入口可能不同,但要取得的是核心原始輸出,而不是測速清單中的「失敗」結果。分享記錄前,請遮蔽訂閱網址、使用者識別資訊及驗證資料。

錯誤:x509: certificate has expired or is not yet valid

原因與解法:本機時間不在憑證有效期間內,或伺服器憑證確實已過期。先同步裝置日期與時間,再確認憑證的生效日及到期日。

錯誤:x509: certificate signed by unknown authority

原因與解法:驗證鏈無法連至受信任的根憑證,可能是缺少中繼憑證、使用自簽憑證,或網路中的憑證遭到置換。請檢查伺服器提供的完整憑證鏈及本機信任環境,不要直接停用驗證。

錯誤:tls: unrecognized name

原因與解法:伺服器可能拒絕了用戶端傳送的 SNI 名稱。請逐字比對節點中的伺服器名稱與伺服器允許的名稱,並確認是否連到錯誤的入口。

錯誤:remote error: tls: handshake failure

原因與解法:對端主動中止交握,可能與 TLS 參數、用戶端憑證要求或伺服器入口政策有關。請搭配伺服器記錄及節點參數排查,不能只憑這一行就判定憑證過期。

二、同步系統時間:日期、時區與憑證有效期限

憑證驗證會比對目前時間與憑證的 notBefore、notAfter。裝置年份錯誤,或從睡眠狀態恢復後時鐘明顯偏移,都可能讓有效憑證被判定為尚未生效或已過期。時區主要影響時間顯示;關鍵在於系統實際時間是否準確,不能只改正介面上的時區就結束檢查。

443
HTTPS 常用的 TCP 連接埠,並非節點固定連接埠
123
NTP 常用的 UDP 服務連接埠
2 項
憑證時間範圍:生效日與到期日
  1. 同步電腦時間

    在 Windows 11 開啟「設定」→「時間與語言」→「日期與時間」,啟用「自動設定時間」,再於同步區域按一下「立即同步」。確認日期、年份及所選時區。

  2. 同步 Android 時間

    在原生 Android 的「設定」→「系統」→「日期與時間」中,啟用自動設定時間與時區。若各品牌系統的選單位置不同,可在設定中搜尋「日期與時間」,並確認網路校時已生效。

  3. 重新連線並確認

    中斷連線後重新連上節點,再查看新記錄的時間戳記。如果仍顯示憑證過期,請檢查遠端憑證日期;已過期的伺服器憑證須由維護者續期並重新載入。

時間同步失敗時,請先確認裝置能正常連上網路;公司網路可能會限制校時流量。不要為了配合過期憑證而將系統日期調回過去,這會影響其他 HTTPS 連線,也可能掩蓋伺服器未續期的問題。

三、確認 SNI:分清伺服器位址、憑證名稱與 Host

節點的「位址」決定要連線的主機或 IP,「連接埠」決定要連線的服務;SNI 則是在 TLS 交握時傳送的伺服器名稱。在一般 TLS 設定中,明確設定的 serverName 通常也會用於憑證主機名稱驗證。連線位址可以是 IP,但用於驗證的名稱必須符合憑證涵蓋的網域,並符合伺服器入口要求。

欄位用途常見填寫錯誤
位址與連接埠指定遠端連線入口將 HTTPS 常用的 443 連接埠當成所有節點的連接埠
SNI / serverName選擇 TLS 虛擬主機,並用於一般 TLS 名稱驗證填入 https:// 前綴、路徑或錯誤的子網域
WebSocket HostTLS 建立後,HTTP 請求中的主機欄位誤以為修改 Host 就能修正憑證名稱不符
WebSocket path指定 WebSocket 請求路徑漏掉開頭的斜線,或使用其他節點的路徑
gRPC serviceName指定 gRPC 服務名稱誤填為網域,或與伺服器設定的名稱不符

在 v2rayN 節點清單中按兩下目標節點,開啟節點編輯視窗,檢查「位址」、「連接埠」及 TLS 區域中的「SNI」或伺服器名稱欄位;在 v2rayNG 中點選節點右側的編輯圖示,確認 TLS 與 SNI 欄位。欄位名稱會隨版本變動,請以該節點的編輯頁面為準,不要到全域路由設定中尋找 SNI。

如果記錄明確指出憑證對某個名稱有效、但不適用於目前名稱,請先確認是否連到錯誤 IP、入口是否回傳預設網站憑證,再修正 SNI。隨意改成知名網站的網域,通常只會造成新的名稱不符。

四、檢查憑證鏈、指紋與 REALITY 參數

根憑證受信任,不代表伺服器傳送的憑證鏈一定完整。一般 TLS 伺服器通常應提供葉憑證及必要的中繼憑證;部分瀏覽器可能透過快取補齊中繼憑證,因此「瀏覽器能開啟」不代表代理核心一定能驗證相同的憑證鏈。也請確認測試的是相同位址、連接埠與 SNI,而不是網域的另一個入口。

v2rayN 是用戶端介面,實際連線行為也取決於節點使用的核心。升級介面後,如果仍在執行舊版核心,新參數可能無法如預期生效。請確認記錄中的核心名稱與啟動版本,再依節點需求更新;不要把「更換指紋後偶爾成功」當成已找出憑證問題。

五、為什麼不該長期使用 allowInsecure

在一般 TLS 中,allowInsecure 用來允許不安全的憑證驗證方式。啟用後通常會略過正常的憑證鏈與主機名稱檢查,但不代表連線退回明文:加密可能仍然存在,問題在於用戶端無法依正常驗證流程確認對端身分。因此,連線恢復不代表設定已正確。

狀況:啟用略過驗證後可以連線

原因與解法:問題可能與憑證驗證有關,但仍無法分辨是時間偏差、名稱錯誤、憑證鏈不完整,還是憑證遭到置換。請恢復驗證,依照記錄逐項修正;不能因此認定對端可信。

狀況:啟用略過驗證後仍然逾時

原因與解法:連線可能尚未進入憑證驗證階段,或存在傳輸及入口政策問題。請檢查位址、連接埠、網路連通性及伺服器記錄,不要繼續啟用無關選項。

在經授權的受控測試環境中,維護者有時會暫時調整驗證選項以縮小問題範圍,但不應在不可信任的網路上將此方式當成日常連線方案。尤其涉及帳號登入、取得訂閱或傳送敏感請求時,應先建立可驗證的連線。使用私有憑證體系時,應透過核心支援的信任設定正確建立信任,而非永久略過驗證。

  1. 儲存原始節點設定或截圖,記下原先的驗證選項,避免測試後忘記還原。
  2. 在啟用正常憑證驗證的狀態下重現一次,保留完整的內層錯誤。
  3. 每次只修改一個有依據的欄位,例如校準時間或修正 SNI,然後重新連線。
  4. 修正完成後,確認 allowInsecure 為 false,或介面中的「略過憑證驗證」已關閉。

六、重新測試清單:憑證驗證通過後仍無法開啟

TLS 交握成功只是其中一個階段。接下來的 WebSocket 交握、gRPC 服務比對、代理協定驗證及目標網域解析仍可能失敗。如果新記錄已不再出現 x509 錯誤,而改為 HTTP 狀態碼異常或驗證失敗,就應針對相應層級排查,不要反覆修改已設定正確的 SNI。

時間已同步,為什麼仍顯示憑證過期?

查看新產生的記錄,確認不是舊資料;再請維護者檢查目前入口實際回傳的憑證。續期檔案已產生但服務尚未重新載入,或負載平衡器中的某個入口仍使用舊憑證,都可能造成錯誤持續出現。

手機可以連線,電腦不行,需要修改 SNI 嗎?

先比對兩端的完整節點參數、實際使用的核心與時間,再比較所連接的網路。確認電腦沒有遭安全軟體置換憑證,也沒有連到不同入口;不能只憑裝置差異就判斷 SNI 設定錯誤。

WebSocket 回應 400 或 404,還是 TLS 問題嗎?

收到 HTTP 回應通常表示已進入 HTTP 層,接著應檢查 WebSocket Host、path 及反向代理規則。同時確認回應是否來自預期的服務,避免把預設網站的回應誤認為節點正常。

更新訂閱後,剛修改的參數又變了?

更新訂閱可能會覆寫節點欄位。可先複製節點進行獨立測試,記下修正項目,再請維護者修正訂閱來源。不要長期依賴每次更新後手動重新填寫參數。

回報疑難時需要提供哪些資訊?

請提供用戶端與核心版本、系統時間、錯誤發生時間、已遮蔽敏感資訊的原始記錄,以及是否使用 TLS 或 REALITY。說明更換網路後結果是否不同,請勿公開完整分享連結與訂閱憑證。

最後一次測試時,請保持憑證驗證開啟,使用同一個節點連續完成連線、存取目標網站及中斷後重新連線。只有錯誤消失且實際請求正常,才算完成本次修復。更多基礎欄位請參閱術語手冊;若要區分網路、代理連線與核心問題,可接著查看技術參考。

V2Ray 用戶端下載