V2Ray TLS 憑證錯誤排查清單:系統時間不同步與 SNI 設定詳解

整理 certificate invalid、handshake failed 等常見 TLS 錯誤,依序檢查系統時間、SNI 與 serverName 不符,以及憑證鏈不完整,並附上用戶端設定檢查步驟。

本文速覽

本文適合遇到節點延遲測試失敗、TLS 交握中斷或憑證無效提示的 v2rayN、v2rayNG 與 v2flyNG 使用者。排查順序固定為系統時間、節點位址與 SNI、憑證有效期限、完整憑證鏈、用戶端核心日誌;完成後即可判斷問題位於本機設定、訂閱資料或伺服器端憑證部署。

TLS 錯誤發生在哪個步驟

V2Ray 或 Xray 建立 TLS 連線時,用戶端會先連線至節點的 IP 與連接埠,再傳送包含 SNI 的 ClientHello。伺服器依據 SNI 選擇憑證,用戶端接著檢查憑證有效期限、網域範圍、簽發鏈與系統信任狀態。任一項未通過,連線都會在代理協定開始傳輸前中斷。

因此,日誌出現 TLS 錯誤不代表 VMess 或 VLESS 的使用者識別資訊錯誤。使用者識別資訊、加密方式與流量控制參數通常要等 TLS 交握完成後,才會參與後續通訊。排錯時應先處理憑證層,避免同時修改 UUID、連接埠、傳輸方式與路由規則,讓變數越來越多。

連線至節點連接埠傳送 SNI回傳憑證鏈驗證憑證啟動代理協定
443
常見 TLS 連接埠
±5 分鐘
優先檢查的時鐘偏差
TLS 1.2
常見相容版本
TLS 1.3
常見現代版本

第一步:校準系統時間與時區

憑證包含明確的生效時間與到期時間。用戶端會使用本機時鐘判斷目前時間是否落在有效區間內;系統日期錯誤一天、時區選擇錯誤,或從睡眠狀態恢復後時鐘未同步,都可能讓有效憑證被判定為尚未生效或已過期。雙系統裝置、長期斷電的桌機,以及關閉自動校時的裝置更容易遇到這類問題。

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

原因與解法:本機時間不在憑證有效區間內,或伺服器端憑證確實已到期——先啟用系統自動校時並立即同步,再重新啟動用戶端核心;時間正確後仍出現錯誤,則改查伺服器端憑證日期。

錯誤:certificate invalid

原因與解法:這是憑證驗證失敗的概括提示——確認日誌下一行是否包含 expired、not yet valid、unknown authority 或 hostname,再依對應分支繼續排查。

  1. 檢查目前時間

    對照可信任的時間來源,檢查年、月、日、時與分。若偏差達到 5 分鐘,先不要修改節點參數,直接處理系統校時。

  2. 確認本機時區

    Windows 開啟「設定」→「時間與語言」→「日期與時間」,確認時區與所在地一致,並啟用自動設定時間。

  3. 立即執行同步

    在日期與時間頁面進入「其他設定」並執行立即同步。在一次排查紀錄中,修正 7 分 12 秒的偏差後,憑證尚未生效的提示便立即消失。

  4. 重新啟動用戶端核心

    在 v2rayN 主介面執行「伺服器」→「重新啟動服務」,再重新測試目前伺服器的延遲,避免舊連線繼續沿用失敗狀態。

Android 裝置同樣需要檢查「日期與時間」中的自動設定時間與自動設定時區。只手動把分鐘調到接近並不可靠,因為錯誤的日期或時區仍會影響憑證判斷。校時完成後,應徹底結束 v2rayNG 或 v2flyNG,再重新開啟並測試節點。

第二步:核對 SNI、serverName 與節點位址

SNI 是 TLS 交握期間傳送給伺服器的主機名稱。V2Ray 與 Xray 設定中通常由 serverName 指定;未明確填寫時,核心可能會根據節點位址推導。若節點位址是 IP、入口網域與憑證網域不同,或訂閱轉換時遺失 SNI,伺服器可能回傳預設憑證,接著觸發網域不符錯誤。

需要區分三個欄位:節點位址決定要連線至何處,連接埠決定連線入口,serverName 決定 TLS 交握時宣告哪個網域。WebSocket 的 Host 要求標頭位於 TLS 建立之後,不能取代 SNI;Host 填寫正確但 serverName 錯誤時,憑證驗證仍會失敗。

設定項目 作用階段 正確填寫方式 典型錯誤
位址 建立 TCP 連線 訂閱提供的入口網域或 IP 複製時多出空格,或仍使用舊入口
連接埠 連線服務入口 與節點設定一致,例如 443 把非 TLS 連接埠當成 TLS 連接埠
serverName TLS ClientHello 填寫憑證涵蓋的完整網域 填寫 IP、舊網域,或留空後推導錯誤
Host HTTP 或 WebSocket 要求 依節點參數填寫應用層主機名稱 誤以為 Host 會自動取代 SNI

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

原因與解法:目前的 serverName 與憑證涵蓋網域不一致——將節點 TLS 的 serverName 改為訂閱提供的憑證網域,不要根據節點備註或測速網域猜測。

錯誤:remote error: tls: handshake failure

原因與解法:伺服器未接受目前的交握參數,常見原因包括 SNI 錯誤、連接埠錯誤,或 TLS 設定與入口不相符——核對位址、443 連接埠、傳輸安全類型與 serverName 後再試。

在一份常見的 VLESS TLS 出站設定中,位址與 serverName 可以不同。以下範例只展示欄位關係,實際位址、使用者識別資訊、連接埠與傳輸方式必須以有效訂閱為準。

{
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "edge.example.net",
            "port": 443,
            "users": [
              {
                "id": "11111111-2222-3333-4444-555555555555",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "security": "tls",
        "tlsSettings": {
          "serverName": "node.example.com"
        }
      }
    }
  ]
}

第三步:檢查憑證有效期限與完整憑證鏈

系統時間正確、SNI 也相符後,仍出現 unknown authority 或 unable to verify certificate,應將重點轉向伺服器回傳的憑證鏈。正常情況下,伺服器需要傳送網站憑證及必要的中繼憑證,用戶端再透過系統信任的根憑證完成驗證。漏傳中繼憑證時,部分已快取憑證的環境可能暫時可用,但其他裝置則會穩定失敗。

錯誤:x509: certificate signed by unknown authority

原因與解法:用戶端無法將網站憑證連接至受信任的根憑證——更新系統憑證存放區,並檢查伺服器是否傳送完整的中繼憑證鏈,不要只部署單張網站憑證。

錯誤:tls: failed to verify certificate

原因與解法:憑證驗證階段失敗——繼續查看同一行的後半段,依 hostname、expired 或 unknown authority 判斷是網域、日期還是信任鏈問題。

錯誤:unexpected EOF during TLS handshake

原因與解法:對端在交握完成前關閉連線——確認連線的確是 TLS 連接埠,並檢查伺服器反向代理是否依目前的 SNI 接收連線。

具備命令列環境時,可使用 OpenSSL 直接查看目標入口回傳的憑證鏈。-connect 指定實際連線位址與連接埠,-servername 指定 SNI;兩者刻意分開,方便驗證入口網域與憑證網域不同的設定。

openssl s_client \
  -connect edge.example.net:443 \
  -servername node.example.com \
  -showcerts

用戶端使用者通常無法修復伺服器端憑證鏈。此時應保留節點名稱、測試時間、第一筆錯誤日誌以及所使用的網路,更新一次訂閱後再次測試。若不同網路與不同裝置都出現相同的憑證鏈錯誤,可將這些資訊提供給節點維護方,以定位憑證部署問題。

第四步:依用戶端檢查 TLS 參數

確認外部憑證正常後,再檢查用戶端儲存的節點參數。v2rayN 桌面版通常搭配 Xray 核心;v2rayNG 使用 Xray 核心;v2flyNG 對應 V2Fly 核心。不同核心的日誌措辭可能不同,但位址、連接埠、傳輸安全、SNI 與系統時間這五項的檢查順序不變。

  1. 固定單一節點

    暫停自動選擇,選取一個能穩定重現錯誤的節點。先記錄節點備註、位址、連接埠、傳輸方式與 TLS serverName,避免多節點輪換干擾判斷。

  2. 檢查核心類型

    在 v2rayN 開啟「設定」→「參數設定」→「Core 類型」,確認目前協定使用預期的核心;儲存後執行「伺服器」→「重新啟動服務」。

  3. 編輯伺服器

    在 v2rayN 伺服器清單選取節點並開啟編輯視窗,逐項核對位址、連接埠、傳輸協定、傳輸層安全性與 SNI。不要將節點備註複製到 serverName。

  4. 核對 Android 設定

    在 v2rayNG 或 v2flyNG 的設定清單開啟目標節點編輯頁面,檢查「位址」「連接埠」「傳輸層安全性」與「SNI」;儲存後重新選取該節點並啟動連線。

  5. 更新訂閱後重新測試

    若手動節點正常而訂閱節點異常,請更新訂閱並比較 TLS 欄位。多個訂閱群組並存時,確認目前節點來自剛更新的群組。

  6. 讀取第一筆錯誤

    清空或分隔日誌後只連線一次,優先讀取第一筆 certificate 或 handshake 錯誤,再依錯誤關鍵字回到對應的排查分支。

現象 優先檢查項目 判斷依據
所有 TLS 節點同時失敗 系統時間、系統憑證存放區、目前網路 不同訂閱與不同網域都出現類似憑證錯誤
同一入口全部失敗 憑證到期、憑證鏈、入口連接埠 多個節點位址或 SNI 指向同一服務入口
只有一個節點失敗 serverName、位址、連接埠、訂閱欄位 其他 TLS 節點在相同裝置與網路下正常
更新訂閱後開始失敗 新舊設定欄位差異 手動保留的舊節點仍可連線

第五步:區分憑證問題、網路問題與協定問題

有些日誌包含 handshake failed,但根因不一定是憑證。例如目標連接埠未提供 TLS、網路途中重設連線、伺服器入口未監聽,都可能讓交握提前結束。判斷關鍵是查看錯誤中是否明確出現 x509、certificate、hostname、expired 或 unknown authority;出現這些關鍵字時優先走憑證分支,沒有時再檢查網路可達性與伺服器監聽狀態。

建議每次只變更一個變數:先校時並重新測試,再修改 SNI 並重新測試,接著檢查憑證鏈,最後才更新核心或重建節點。若同時更換網路、核心、連接埠並重新匯入訂閱,即使連線恢復,也無法知道真正修復了哪一項。

延遲測試顯示逾時,但日誌沒有憑證錯誤?

先檢查節點位址能否解析、目標連接埠是否可連線,以及本機代理連接埠是否被占用。只有日誌出現 certificate、x509 或 TLS verify 相關資訊時,才進入憑證排查。

瀏覽器能開啟網域,為什麼節點仍然交握失敗?

瀏覽器存取的網域、入口位址與節點 SNI 可能並不相同。依節點實際設定執行帶有 -servername 的測試,並核對用戶端 serverName,而不是只看首頁能否開啟。

更新訂閱後只有部分節點出錯?

選取一個正常節點和一個異常節點,比對位址、443 連接埠、TLS 開關及 SNI。部分節點失敗通常指向單一入口的憑證或訂閱欄位,而不是本機的統一設定。

系統時間正確,仍提示憑證尚未生效?

確認年份、日期、時區與自動校時狀態都正確,再檢查憑證 Not Before。若多台時間正確的裝置得到相同結果,通常需要伺服器端重新部署目前有效的憑證。

改用 IP 位址後出現網域不符,該怎麼辦?

位址可以是 IP,但 SNI 仍應填寫憑證涵蓋的網域。若訂閱未提供 serverName,不應從節點備註猜測,應重新取得完整設定參數。

最終重新測試清單

修正設定後,應透過一次可重現的完整測試確認結果,而不是只看用戶端狀態變成已連線。先重新啟動核心,執行節點延遲測試,再開啟實際網頁或應用程式請求,最後檢查日誌是否仍出現新的 TLS 錯誤。若連線成功但網頁無法存取,問題已越過 TLS 層,應改查系統代理、DNS、路由分流與出站設定。

3 次
連續重新測試連線
10 行
保留錯誤上下文
1 個變數
每輪只修改一項

依照這個順序排查,可以將籠統的 handshake failed 拆解成可驗證的具體問題:時間異常會影響有效期限判斷,SNI 錯誤會回傳不相符的憑證,憑證鏈不完整會中斷信任驗證,連接埠或入口錯誤則可能在交握完成前直接斷線。記錄每次修改與重新測試的結果,比反覆刪除用戶端、批次修改節點參數更容易找出根因。

下載v2rayN