本文適合遇到節點延遲測試失敗、TLS 交握中斷或憑證無效提示的 v2rayN、v2rayNG 與 v2flyNG 使用者。排查順序固定為系統時間、節點位址與 SNI、憑證有效期限、完整憑證鏈、用戶端核心日誌;完成後即可判斷問題位於本機設定、訂閱資料或伺服器端憑證部署。
TLS 錯誤發生在哪個步驟
V2Ray 或 Xray 建立 TLS 連線時,用戶端會先連線至節點的 IP 與連接埠,再傳送包含 SNI 的 ClientHello。伺服器依據 SNI 選擇憑證,用戶端接著檢查憑證有效期限、網域範圍、簽發鏈與系統信任狀態。任一項未通過,連線都會在代理協定開始傳輸前中斷。
因此,日誌出現 TLS 錯誤不代表 VMess 或 VLESS 的使用者識別資訊錯誤。使用者識別資訊、加密方式與流量控制參數通常要等 TLS 交握完成後,才會參與後續通訊。排錯時應先處理憑證層,避免同時修改 UUID、連接埠、傳輸方式與路由規則,讓變數越來越多。
第一步:校準系統時間與時區
憑證包含明確的生效時間與到期時間。用戶端會使用本機時鐘判斷目前時間是否落在有效區間內;系統日期錯誤一天、時區選擇錯誤,或從睡眠狀態恢復後時鐘未同步,都可能讓有效憑證被判定為尚未生效或已過期。雙系統裝置、長期斷電的桌機,以及關閉自動校時的裝置更容易遇到這類問題。
錯誤:x509: certificate has expired or is not yet valid
原因與解法:本機時間不在憑證有效區間內,或伺服器端憑證確實已到期——先啟用系統自動校時並立即同步,再重新啟動用戶端核心;時間正確後仍出現錯誤,則改查伺服器端憑證日期。
錯誤:certificate invalid
原因與解法:這是憑證驗證失敗的概括提示——確認日誌下一行是否包含 expired、not yet valid、unknown authority 或 hostname,再依對應分支繼續排查。
-
檢查目前時間
對照可信任的時間來源,檢查年、月、日、時與分。若偏差達到 5 分鐘,先不要修改節點參數,直接處理系統校時。
-
確認本機時區
Windows 開啟「設定」→「時間與語言」→「日期與時間」,確認時區與所在地一致,並啟用自動設定時間。
-
立即執行同步
在日期與時間頁面進入「其他設定」並執行立即同步。在一次排查紀錄中,修正 7 分 12 秒的偏差後,憑證尚未生效的提示便立即消失。
-
重新啟動用戶端核心
在 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
- 查看輸出中的網站憑證主體網域,確認其涵蓋
node.example.com。 - 查看憑證的 Not Before 與 Not After,確認目前時間位於有效區間內。
- 檢查 Certificate chain 是否包含網站憑證及所需的中繼憑證,而不是只有編號 0 的單張憑證。
- 確認最後的驗證結果是否成功;若憑證鏈不完整,應由伺服器補齊中繼憑證後重新載入入口設定。
- 若多個節點共用同一入口並同時失敗,應優先檢查入口憑證續期與反向代理設定,而不是逐一修改用戶端節點。
用戶端使用者通常無法修復伺服器端憑證鏈。此時應保留節點名稱、測試時間、第一筆錯誤日誌以及所使用的網路,更新一次訂閱後再次測試。若不同網路與不同裝置都出現相同的憑證鏈錯誤,可將這些資訊提供給節點維護方,以定位憑證部署問題。
第四步:依用戶端檢查 TLS 參數
確認外部憑證正常後,再檢查用戶端儲存的節點參數。v2rayN 桌面版通常搭配 Xray 核心;v2rayNG 使用 Xray 核心;v2flyNG 對應 V2Fly 核心。不同核心的日誌措辭可能不同,但位址、連接埠、傳輸安全、SNI 與系統時間這五項的檢查順序不變。
-
固定單一節點
暫停自動選擇,選取一個能穩定重現錯誤的節點。先記錄節點備註、位址、連接埠、傳輸方式與 TLS serverName,避免多節點輪換干擾判斷。
-
檢查核心類型
在 v2rayN 開啟「設定」→「參數設定」→「Core 類型」,確認目前協定使用預期的核心;儲存後執行「伺服器」→「重新啟動服務」。
-
編輯伺服器
在 v2rayN 伺服器清單選取節點並開啟編輯視窗,逐項核對位址、連接埠、傳輸協定、傳輸層安全性與 SNI。不要將節點備註複製到 serverName。
-
核對 Android 設定
在 v2rayNG 或 v2flyNG 的設定清單開啟目標節點編輯頁面,檢查「位址」「連接埠」「傳輸層安全性」與「SNI」;儲存後重新選取該節點並啟動連線。
-
更新訂閱後重新測試
若手動節點正常而訂閱節點異常,請更新訂閱並比較 TLS 欄位。多個訂閱群組並存時,確認目前節點來自剛更新的群組。
-
讀取第一筆錯誤
清空或分隔日誌後只連線一次,優先讀取第一筆 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、路由分流與出站設定。
- 系統日期、時間與時區正確,且已執行自動校時。
- 節點位址沒有空格或舊網域,連接埠與伺服器入口一致。
- 已依訂閱設定啟用傳輸層安全性,TLS 入口通常使用明確指定的連接埠。
serverName與憑證涵蓋網域一致,沒有誤填節點備註或 IP。- WebSocket Host 與 TLS SNI 分開核對,沒有將兩個欄位視為同一項。
- 憑證仍在有效期限內,伺服器已傳送必要的中繼憑證。
- 更新訂閱後確認目前使用的是新節點,而不是舊群組中的同名設定。
- 日誌中的第一筆憑證錯誤已消失,連續三次連線測試結果一致。
依照這個順序排查,可以將籠統的 handshake failed 拆解成可驗證的具體問題:時間異常會影響有效期限判斷,SNI 錯誤會回傳不相符的憑證,憑證鏈不完整會中斷信任驗證,連接埠或入口錯誤則可能在交握完成前直接斷線。記錄每次修改與重新測試的結果,比反覆刪除用戶端、批次修改節點參數更容易找出根因。