故障排查 預計閱讀 12 分鐘

V2Ray TLS 握手失敗或憑證錯誤怎麼辦:時間不同步與 SNI 設定排查

TLS 錯誤多半不是節點失效:先確認裝置系統時間,再檢查 serverName/SNI 是否符合憑證網域,最後核對 allowInsecure 與指紋設定,逐步找出憑證問題。

V2Ray 或 Xray 核心建立加密連線時,會先完成 TCP 或其他底層傳輸,再進行 TLS 握手。憑證有效期、憑證網域、系統時間、SNI、TLS 版本與用戶端指紋只要有一項不一致,都可能讓連線在送出代理請求前中止。因此,瀏覽器顯示連線失敗、v2rayN 測速顯示無法使用,或 v2rayNG 日誌出現憑證錯誤,都不能直接代表伺服器連接埠已關閉。

本文速覽

本文適合遇到 TLS handshake、x509、certificate、serverName 或 SNI 錯誤的 v2rayN、v2rayNG 與 v2flyNG 使用者;依照「讀日誌、校時間、核對網域、查參數、再測試」的順序,可以判斷問題出在本機、節點設定,還是伺服器憑證鏈。

先從日誌區分 TLS 錯誤類型

排查 TLS 問題的第一步不是反覆點擊測速,而是先保存一次完整日誌。v2rayN 可在主畫面的日誌區域查看核心輸出,也可透過「設定」→「參數設定」確認日誌層級;v2rayNG 與 v2flyNG 可開啟側邊選單中的日誌頁面,再重新連線一次。檢查時應記下最早出現的錯誤行,後續的連線關閉與重試失敗通常只是連帶結果。

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

原因與解法:裝置時間不在憑證有效期內,或伺服器憑證確實已過期——先同步系統日期、時間與時區,再查看憑證的起始與到期時間。

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

原因與解法:用戶端驗證的 serverName 與憑證網域不一致——將 SNI 改為憑證涵蓋的完整網域,不要直接照抄伺服器 IP。

錯誤:tls: failed to verify certificate

原因與解法:憑證鏈、簽發關係或本機信任環境未通過驗證——先排除時間問題,再檢查伺服器是否傳送完整憑證鏈。

錯誤:remote error: tls: handshake failure

原因與解法:遠端在握手階段主動中止連線——核對 SNI、ALPN、TLS 指紋與傳輸層設定,並確認連線至正確的連接埠。

錯誤:context deadline exceeded

原因與解法:握手未能在逾時期限內完成——先檢查網路可達性與連接埠,再結合前一則日誌判斷是否屬於憑證問題。

EOFconnection reset by peer 與逾時並不專屬於 TLS。它們也可能由伺服器程序未監聽、傳輸路徑不相符,或中間網路設備提前中斷所造成。只有當日誌同時出現 x509certificateserverName 或明確的 TLS 握手文字時,才應優先沿著憑證鏈排查。

  • 先找最早出現的錯誤,不要只複製日誌最後一行。
  • 記錄節點位址、連接埠、傳輸方式、TLS 開關與 SNI,但不要公開分享訂閱連結。
  • 同一節點連續測試兩次即可,頻繁重新連線會讓日誌被重複資訊淹沒。
  • 若多個節點同時在同一台裝置出現憑證時間錯誤,應先檢查裝置時鐘。

系統時間與時區是第一個檢查項目

憑證包含「開始生效」與「到期」兩個時間點。裝置會使用本地系統時鐘判斷目前時間是否落在有效區間內。日期正確但時區錯誤、休眠後時鐘漂移、虛擬機器未同步主機時間,都可能觸發 not yet validexpired。排查時不能只看工作列顯示的時分,還要核對年份、月份、日期與時區。

443
常見 TLS 伺服器連接埠
5 分鐘
建議啟動校時排查的偏差
TLS 1.2
常見相容版本
TLS 1.3
常見現代版本
  1. 核對日期

    確認年份、月份與日期都正確。若裝置剛從長時間休眠中恢復,先等待系統完成網路校時。

  2. 核對時區

    Windows 開啟「設定」→「時間與語言」→「日期與時間」,確認時區與目前位置一致,並啟用自動設定時間。

  3. 立即同步

    在同一頁面點選「立即同步」。安卓裝置進入系統「設定」→「系統」→「日期與時間」,開啟自動設定時間與自動設定時區。

  4. 重新啟動核心

    停止目前連線,退出用戶端核心後重新啟動,再對原節點進行一次延遲測試與實際網頁存取。

Windows 也可以在系統管理員終端機中查詢時間服務狀態並發起同步。Linux 可使用 timedatectl 檢查本地時間、UTC 時間、時區與 NTP 狀態。指令回傳成功後,應重新啟動 V2Ray 或 Xray 核心,避免舊連線繼續沿用先前的握手狀態。

w32tm /query /status
w32tm /resync

timedatectl status
sudo timedatectl set-ntp true

核對節點位址、SNI 與憑證網域

節點「位址」與 TLS 的 serverName 負責不同工作。位址用於 DNS 解析並建立網路連線;serverName 會放入 TLS ClientHello 的 SNI 擴充,同時通常作為憑證網域的驗證目標。伺服器位址可以是 IP 或接入網域,但 SNI 應與伺服器憑證涵蓋的網域一致。

例如,用戶端連線位址為 203.0.113.20,憑證只涵蓋 edge.example.net,則位址可以保留為 IP,SNI 應填寫 edge.example.net。若 SNI 留空,核心可能會根據位址推導驗證名稱;當位址是 IP、憑證卻只包含網域時,就容易出現「憑證對某個網域有效,但不適用於目前位址」的錯誤。

設定項目 作用 正確核對方式
位址 Address 決定實際連線的主機 確認網域可解析,或 IP 與伺服器端一致
連接埠 Port 決定連線的監聽連接埠 確認伺服器確實在該連接埠提供對應的 TLS 入站
SNI / serverName 選擇虛擬主機並參與憑證驗證 填寫憑證涵蓋的完整網域,不要附加協定與路徑
Host 供 HTTP、WebSocket 等傳輸層使用 依伺服器反向代理規則填寫,不要自動視為與 SNI 相同
ALPN 協商應用層協定 使用伺服器要求的值,未明確要求時避免任意覆寫
  1. 開啟節點

    在 v2rayN 主畫面選取目標節點並開啟編輯視窗;在 v2rayNG 或 v2flyNG 中點選對應設定的編輯入口。

  2. 抄錄參數

    記錄位址、連接埠、傳輸協定、TLS 開關、SNI、Host、ALPN 與指紋,修改前保留原值以便復原。

  3. 比對網域

    將 SNI 與錯誤訊息中列出的憑證網域逐字比較,特別檢查多餘空格、中文標點、錯誤後綴與遺漏的子網域。

  4. 儲存後重新測試

    儲存後重新啟動核心,只測試這一個節點。若錯誤從網域不相符變成連線逾時,再單獨檢查位址解析與連接埠可達性。

結論:連線位址可通,不代表憑證名稱正確

當 TCP 已連線但 x509 明確回報網域不相符時,應優先修正 SNI;更換本地 SOCKS 或 HTTP 連接埠不會改變遠端憑證驗證結果。

判斷憑證過期、憑證鏈遺漏與伺服器設定錯誤

系統時間準確、SNI 也與網域一致後,仍然出現憑證驗證失敗,就要檢查伺服器憑證本身。常見情況包括憑證已過期、續期後服務程序沒有重新載入、 新憑證部署到錯誤的虛擬主機,以及伺服器只傳送網站憑證卻遺漏中繼憑證。

錯誤:x509: certificate signed by unknown authority

原因與解法:用戶端無法建立通往受信任根憑證的完整鏈路——伺服器應部署完整憑證鏈,本機系統也應保持憑證儲存區正常更新。

錯誤:x509: certificate has expired

原因與解法:在系統時間準確的前提下,憑證到期時間已經過去——續期後需要讓實際監聽 TLS 的服務重新載入憑證檔案。

錯誤:tls: bad certificate

原因與解法:遠端拒絕了用戶端提供的憑證或雙向驗證參數——確認該入站是否啟用了用戶端憑證驗證,並使用對應設定。

如果透過一般瀏覽器存取同一網域時也顯示憑證異常,問題更可能出在伺服器憑證部署;如果瀏覽器正常而 V2Ray/Xray 失敗,則繼續比較連線連接埠、SNI、ALPN 與傳輸層。瀏覽器存取正常只能證明瀏覽器連線的那個網域與連接埠可用,不能證明節點設定中的另一個連接埠使用了同一套憑證。

  • 確認憑證的生效時間與到期時間涵蓋目前時刻。
  • 確認憑證主體別名包含 SNI 使用的完整網域。
  • 確認反向代理或 TLS 終止服務傳送完整憑證鏈。
  • 確認憑證續期後,實際監聽程序已重新載入設定。
  • 確認連接埠 443 或自訂連接埠沒有被其他服務佔用。
  • 確認訂閱更新沒有把舊網域、舊連接埠重新寫回用戶端。

allowInsecure、指紋與 ALPN 應該如何設定

allowInsecure 控制用戶端是否跳過憑證有效性與網域驗證。v2rayN、v2rayNG 與 v2flyNG 的介面可能將它顯示為「跳過憑證驗證」或意思相近的開關。正常使用公開信任憑證時應保持關閉,讓核心繼續驗證憑證鏈與 serverName。

暫時開啟此選項可以協助定位問題:如果開啟後立即連通,表示網路位址、連接埠與主要傳輸路徑大致可達,問題集中在憑證有效期、網域匹配或信任鏈。但這個結果只用於診斷,之後仍應恢復嚴格驗證並修正真正原因。

  • allowInsecure:影響憑證驗證,不負責修復錯誤的 SNI,也不會更新過期憑證。
  • fingerprint:用於調整 TLS ClientHello 特徵,例如設定要求的 chrome;它不等於憑證指紋,也不能取代憑證鏈驗證。
  • ALPN:常見值包括 h2http/1.1,必須與伺服器入口及傳輸方式相容。
  • TLS 版本:用戶端與伺服器必須存在共同支援的版本;老舊系統環境可能無法完成現代 TLS 協商。

修改指紋前,應先確認節點提供者或自建服務的設定明確要求什麼。一次改動指紋、ALPN、SNI 全部參數,會讓測試結果失去可比性。正確做法是保留一份原始設定,每次只修改一個欄位,重新啟動核心並保存對應日誌。

測試 1:保持嚴格憑證驗證,只修正系統時間
測試 2:保持其他參數不變,只修正 SNI
測試 3:恢復嚴格驗證,只調整伺服器要求的指紋
測試 4:核對 ALPN 與傳輸層後重新連線

結論:跳過驗證只能用於縮小問題範圍

若關閉憑證驗證後連線恢復,應回到憑證有效期、完整鏈與 SNI 三項繼續定位,而不是將臨時診斷開關長期留在節點設定中。

依固定順序重新測試,避免多項參數互相干擾

完成修改後,應停止舊連線並重新啟動核心。只在介面中點選儲存,有時不會中斷已建立或正在重試的連線。重新測試時先做一次節點延遲測試,再存取一個一般 HTTPS 頁面,最後查看日誌是否仍出現相同的第一個錯誤。

  1. 同步時間

    將系統時間偏差降至正常範圍,確認日期、時區與自動校時狀態正確。

  2. 檢查位址

    確認節點網域可以解析,伺服器位址與連接埠沒有複製錯誤,TLS 服務確實監聽在目標連接埠。

  3. 修正 SNI

    讓 serverName 與憑證涵蓋的網域一致,欄位中只填寫網域,不要加入 https://、連接埠或路徑。

  4. 驗證憑證鏈

    檢查有效期、中繼憑證與實際載入狀態;憑證續期後確認監聽服務使用的是新憑證。

  5. 逐項修改參數

    視需要檢查指紋與 ALPN,每輪只修改一項,並保留修改前後的日誌結果。

  6. 恢復嚴格驗證

    完成診斷後關閉跳過憑證驗證選項,重新啟動核心並進行最終連線測試。

若桌面端與安卓端在同一網路、同一節點上同時失敗,而兩台裝置的時間都準確,應優先檢查伺服器憑證與 SNI;若只有一台裝置失敗,則優先比較該裝置的系統時間、用戶端設定與系統憑證環境。若所有 TLS 節點都失敗但非 TLS 測試連線正常,還應檢查本機安全軟體、網路出口與系統 TLS 環境是否改寫了握手路徑。

下載 v2rayN