V2Ray TLS 握手失敗、憑證錯誤排查:系統時間同步與 SNI 設定

遇到憑證無效或握手逾時,常見原因是裝置時間不準,或 SNI 與憑證網域不符。依序檢查時間同步、serverName、allowInsecure 和 ALPN 設定。

本文重點

適用於 v2rayN、v2rayNG 使用一般 TLS 節點時遇到的憑證與握手錯誤。先從記錄判斷是憑證驗證失敗還是網路逾時,再校正系統時間、確認 SNI,最後檢查憑證鏈與 ALPN。每次只調整一個項目並重新連線,避免把伺服器憑證問題誤判為用戶端設定錯誤。

1. 先分辨憑證錯誤與握手逾時

TLS 握手發生在代理協定交換資料之前。用戶端先連線至伺服器,再送出握手參數、驗證伺服器身分並協商加密連線;任何一步失敗,都可能在外層記錄中顯示為「連線失敗」。因此不要只看最後一行,應往前找出包含 x509、tls 或具體網路錯誤的原因鏈。

建立連線送出握手驗證憑證協商完成傳輸資料

在 v2rayN 主視窗底部的記錄區,記下一次連線失敗的時間和節點名稱。在 v2rayNG 主畫面選單中開啟「記錄」,重新連線後查看新增的記錄。不同版本的選單名稱可能略有不同,但排查重點相同:找出同一次連線中最具體的底層錯誤,而不是反覆查看「重試全部失敗」之類的摘要訊息。

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

原因與處理方式:裝置時間不在憑證有效期間內,或伺服器憑證確實已過期。先同步裝置時間,再核對記錄中的有效期限;不能只憑這則訊息判斷是哪一端出問題。

錯誤:x509: certificate is valid for example.com, not edge.example.net

原因與處理方式:範例中用來驗證的名稱與憑證涵蓋的網域不符。請確認節點提供的 SNI,並檢查伺服器是否傳回正確網站的憑證。

錯誤:x509: certificate signed by unknown authority

原因與處理方式:憑證無法建立通往受信任根憑證的驗證鏈。請檢查伺服器是否提供完整的中繼憑證,並確認裝置的信任存放區是否過舊,或網路中是否有憑證遭到替換。

錯誤:i/o timeout

原因與處理方式:某次網路讀寫超過等待時間。請根據前文判斷逾時發生在連線階段還是握手階段,再檢查位址、連接埠、防火牆和服務狀態,不要直接歸因於 SNI。

2. 系統時間不同步:先校正時間,再重新連線

憑證有生效時間和到期時間。裝置日期落後幾個月,可能會顯示「尚未生效」;日期超前,則可能顯示「已過期」。TLS 驗證比較的是實際時間點;時區顯示不同,不一定代表系統時鐘錯誤。不過,手動調整時區後又手動修改時間,容易造成實際時間偏差。

443
HTTPS 常用的 TCP 連接埠,不代表所有節點都使用此連接埠
123
NTP 常用的 UDP 連接埠,與代理連接埠不同
2 個
憑證有效期範圍:Not Before 與 Not After
  1. Windows 11:前往「設定」→「時間與語言」→「日期與時間」,開啟「自動設定時間」,確認時區後按一下「立即同步」。同步完成後,確認年份、日期和分鐘都正確。
  2. 查看同步狀態:在終端機執行下方的查詢命令,確認時間來源與最近一次成功同步的時間。如需強制重新同步,請以系統管理員權限執行第二條命令。
  3. Android:前往系統「設定」→「系統」→「日期與時間」,開啟「自動設定時間」和自動時區;部分裝置的選項位於「更多設定」。重新連上網路後,確認時間已更新。
  4. 重新測試:中斷連線後重新連上目前使用的節點,再發出一次連線請求。校正時間不會自動修復先前失敗的連線,請查看新記錄確認結果。
w32tm /query /status
w32tm /resync

如果 Windows 顯示時間服務未啟動,請先在「服務」中檢查 Windows Time 的狀態;受組織管理的電腦應遵循管理員設定的時間來源,不要任意替換。如果每次關機後日期都會重設,也應檢查裝置韌體時鐘與硬體狀況。若時間正確,錯誤仍指出憑證過期,應由伺服器端更新憑證並重新載入服務。

判斷方式:時間恢復正常後仍顯示過期,就檢查伺服器端

確認裝置目前時間不在憑證有效期間內,且時間同步正常後,將記錄中的到期日期提供給節點維護人員;繼續切換本機路由規則無法延長憑證有效期。

3. SNI 與 serverName:確認網域,不要直接填入連線 IP

SNI 是用戶端在握手時送出的伺服器名稱,可協助同一個位址上的服務選擇憑證與網站。一般設定中的 tlsSettings.serverName 通常同時用於送出 SNI 和驗證憑證名稱。它不等同於節點連線位址,也不等同於 WebSocket 的 HTTP Host;三者可能相同,也可能依伺服器部署方式而異。

欄位或概念用途檢查重點
伺服器位址決定實際連線的主機或 IP確認位址可解析,連接埠與節點說明一致
SNI / serverName選擇 TLS 網站,並參與憑證名稱驗證使用節點提供的網域,不要加上通訊協定或路徑
憑證 SAN列出憑證可供驗證的名稱必須涵蓋用戶端驗證的目標名稱
WebSocket Host參與 HTTP 請求與反向代理的流量分流依傳輸設定填寫,不能取代 SNI

在 v2rayN 中按兩下目標伺服器列,開啟節點編輯視窗,檢查 TLS 區域中的「SNI」或「伺服器名稱」;在 v2rayNG 中點選節點編輯圖示,檢查 TLS 區域的對應欄位。欄位名稱可能因版本和節點類型而異,請以訂閱提供的設定為準,不要把連線位址、偽裝網域和 SNI 一律改成相同字串。

以下僅示範一般 TCP + TLS 的 streamSettings 片段,並非可獨立執行的完整設定。範例網域僅用於說明欄位,實際使用時應替換為節點提供的值;若使用 WebSocket 或其他傳輸方式,請保留原有傳輸類型與對應設定。

{
  "streamSettings": {
    "network": "tcp",
    "security": "tls",
    "tlsSettings": {
      "serverName": "edge.example.com",
      "allowInsecure": false
    }
  }
}

4. allowInsecure 與憑證鏈:保留身分驗證

allowInsecure 不是「相容模式」或「加速開關」。在一般 TLS 設定中,將它設為 true 會略過重要的憑證驗證,讓過期、名稱不符或不受信任的憑證不再遭到正常攔截。這或許能掩蓋問題,卻無法證明連線到的是預期伺服器,也無法修復網路逾時。

在節點編輯畫面中檢查「略過憑證驗證」或「允許不安全連線」選項,日常設定應保持關閉,對應值為 allowInsecure: false。若舊設定曾開啟此選項,恢復驗證後出現憑證錯誤,就應依錯誤內容繼續查證,而不是重新開啟選項當作長期處理方式。

5. ALPN 與逾時:依伺服器傳輸需求設定

ALPN 用於在 TLS 握手期間協商應用層通訊協定,常見值為 h2 和 http/1.1。它不是節點通訊協定名稱,也不是選項越多越好。使用 HTTP/2 的 gRPC 傳輸需要相應的 HTTP/2 支援;傳統 WebSocket Upgrade 通常使用 HTTP/1.1,實際情況則取決於伺服器和反向代理的部署方式。

  1. 先確認節點的傳輸類型,再依服務提供者的說明設定 ALPN;若沒有明確要求,不要為了測試而強制限定單一通訊協定。
  2. 如果記錄出現 tls: no application protocol,請檢查用戶端提供的 ALPN 是否與伺服器允許的通訊協定有交集。
  3. 如果記錄只有逾時,請先確認實際使用的伺服器連接埠。例如節點設定為 8443 時,測試 443 成功並不能證明該節點可用。
  4. 保持節點參數不變,分別使用目前網路和另一個可用網路重新測試;若結果不同,應優先檢查網路路徑與存取限制。

Windows 可使用下方命令測試與指定連接埠的 TCP 連線。範例網域和連接埠僅用來示範命令格式,請替換為節點的實際值。TcpTestSucceeded: True 只代表 TCP 連線已建立,不表示 TLS 憑證、ALPN 或代理驗證設定正確。

Test-NetConnection -ComputerName edge.example.com -Port 443

判斷方式:TCP 連得上,不代表 TLS 可用

連接埠測試成功後仍出現憑證錯誤,請回頭檢查時間、SNI 和憑證鏈;如果連接埠測試失敗,則先檢查位址與網路,不要同時修改 ALPN、傳輸路徑和驗證參數。

6. 常見問題與修復後的驗證

電腦時間只差幾分鐘,也會連線失敗嗎?

如果時間剛好接近憑證的生效或到期界線,幾分鐘的差異也可能影響驗證。先同步時間並重新連線,再查看新記錄;不要手動調慢時間來繞過已過期的憑證。

瀏覽器能正常開啟網域,為什麼節點仍然報錯?

瀏覽器可能連到不同的連接埠、位址或網站。請比對節點實際連線的位址、連接埠和 SNI;瀏覽器顯示憑證正常只能作為參考,不能取代節點握手驗證。

重新安裝 v2rayN 能修復憑證問題嗎?

重新安裝無法修正伺服器憑證過期、SNI 填錯或裝置時間不準。先記下具體錯誤;只有確認是舊版本相容性或本機檔案異常時,才考慮更新用戶端並匯入正確設定。

Android 連線失敗、桌面版正常,應先改哪裡?

先確認兩台裝置使用相同節點、SNI 和傳輸參數,再比較自動時間設定與系統更新狀況。讓兩台裝置連上同一個網路後重新測試,可降低網路差異對判斷的影響。

完成修正後,重新連上節點並實際發出一次連線請求,確認新增記錄不再出現憑證驗證或握手錯誤,再檢查應用程式是否恢復連線。若 TLS 已完成但仍無法存取,請繼續檢查代理協定驗證、傳輸路徑和路由設定,不要反覆修改已確認正確的 SNI。

V2Ray 用戶端下載