排查順序:先從核心日誌判斷是憑證驗證失敗,還是一般連線逾時,再檢查本機時間、SNI、憑證鏈與伺服器監聽狀態。適用於在 v2rayN、v2rayNG 或 v2flyNG 遇到 TLS 錯誤的使用者;看完即可依錯誤訊息定位設定問題,避免用略過驗證來掩蓋問題。
先看日誌:TLS 握手失敗發生在哪個階段
連線階段:節點顯示逾時,不代表憑證有問題。常見的 TCP + TLS 代理連線,會先解析伺服器位址、建立 TCP 連線,再進行 TLS 協商,最後才進行代理協定驗證與資料傳輸。任何前置步驟失敗,都可能讓介面顯示無法連線。
擷取日誌:在用戶端日誌區找到剛才那次連線的錯誤,保留時間、錯誤原文與使用的核心名稱。優先查看底層原因,不要只看外層的 failed to process outbound traffic。這通常只是包裝錯誤訊息,無法單獨判斷問題出在憑證、網路還是協定參數。
錯誤:x509: certificate has expired or is not yet valid
原因與解法:本機時鐘不在憑證有效期限內,或憑證確實已過期、尚未生效;先校準系統時間,再檢查伺服器實際提供的憑證有效起訖時間。
錯誤:x509: certificate signed by unknown authority
原因與解法:憑證鏈無法連結至本機信任的根憑證,可能是缺少中繼憑證、使用自簽憑證,或連線遭到攔截;請確認憑證簽發者及伺服器提供的完整憑證鏈。
錯誤:remote error: tls: handshake failure
原因與解法:對端拒絕了握手,光看這行訊息無法確定原因;請檢查 SNI、TLS 終止位置與伺服器日誌,再確認協商參數。
逾時判斷:如果日誌只有 dial tcp、i/o timeout 或連線遭拒,且沒有憑證錯誤,應先確認位址、連接埠與伺服器監聽狀態。尚未收到伺服器憑證時,修改憑證驗證開關無法修復連線。
系統時間不同步:先檢查日期,再確認同步狀態
有效期限判斷:憑證包含生效時間與到期時間,用戶端會依本機時鐘判斷憑證是否有效。電腦長期關機、虛擬機器還原快照,或裝置斷電後時鐘重設,都可能讓有效憑證看起來尚未生效或已經過期。別只看工作列上的時分,年份與日期也同樣重要。
- Windows 校時:開啟「設定」→「時間與語言」→「日期與時間」,啟用「自動設定時間」,確認時區後點選「立即同步」。不同系統版本的按鈕位置可能略有不同。
- 同步結果:查看最近一次成功同步的時間。若要進一步確認,可在命令提示字元執行下方的唯讀命令,檢查時間來源與同步狀態。
- Android 校時:在系統設定中搜尋「日期與時間」,啟用自動設定日期與時間及自動時區;實際路徑依裝置系統而異,完成後重新連線。
- 重現確認:校準時間後重新連線,比對同一節點的新日誌。如果仍顯示憑證過期,請由伺服器管理者確認憑證,不要繼續調整本機日期。
w32tm /query /status
w32tm /query /source
時區差異:時區主要影響本地時間的顯示,TLS 驗證比較的是絕對時間。把時區改成其他地區無法修復憑證問題;應確保系統實際時間準確,而不是讓鐘面看起來接近另一台裝置。
SNI 填錯:分別確認伺服器位址、憑證網域與 Host
欄位用途:SNI 是用戶端在 TLS 握手時傳送的伺服器名稱,常用來讓同一位址上的服務選擇相應的憑證與網站。Xray、V2Ray 的常見 TLS 設定以 serverName 表示此欄位;用戶端介面可能顯示為 SNI 或伺服器名稱。連線位址可以是 IP,但憑證身分通常仍須依伺服器指定的網域驗證。
| 欄位 | 用途 | 檢查重點 |
|---|---|---|
| 伺服器位址 | 指定 TCP 連線目標 | 確認網域解析或 IP 正確,且連接埠與伺服器設定一致 |
| SNI / serverName | 用於 TLS 憑證選擇與名稱驗證 | 使用伺服器指定的名稱,憑證 SAN 必須涵蓋要驗證的名稱 |
| WebSocket Host | 在 TLS 連線後用於 HTTP 請求路由 | 須與反向代理網站設定一致,不能取代 SNI |
| WebSocket path | 符合伺服器端的 WebSocket 入口設定 | 路徑與大小寫依伺服器設定為準,不影響憑證有效期限 |
介面確認:在 v2rayN 編輯目前節點,檢查位址、連接埠、傳輸方式與 TLS 設定;在 v2rayNG、v2flyNG 中開啟對應節點的編輯畫面,確認伺服器名稱相關欄位。不同版本的版面不盡相同,應依欄位用途與實際產生的核心設定判斷,不要只看輸入框的位置。
- 名稱格式:SNI 通常填寫純主機名稱,不加
https://、連接埠、路徑或尾端空格。 - 憑證比對:檢查憑證的主體替代名稱 SAN,不要只看憑證清單顯示的簡稱。萬用字元通常只符合一層子網域,不會自動涵蓋根網域。
- 留白時的行為:部分設定會依伺服器位址推導名稱;使用 IP 位址連線時尤其不能依賴自動判斷,應依伺服器說明明確確認。
- 訂閱覆寫:手動修正後,下次更新訂閱時可能會覆寫欄位。若匯入內容持續有誤,應回報訂閱設定來源,而不是一再修改同一個節點。
判斷順序:先比對憑證名稱,再檢查 HTTP 路由
處理順序:出現名稱不符時,先修正 SNI 與憑證的對應關係;TLS 已成功但出現 HTTP 狀態錯誤時,再排查 Host 與路徑。只修改 Host,無法修復握手階段的憑證名稱錯誤。
憑證鏈與伺服器:瀏覽器能開啟,不代表核心一定驗證通過
信任鏈檢查:伺服器通常須傳送網站憑證及必要的中繼憑證,用戶端再將憑證鏈連結至受信任的根憑證。瀏覽器可能快取中繼憑證,或採用不同的信任機制,因此「瀏覽器能開啟」只能當作線索,不能取代代理核心的驗證結果。
- 確認 TLS 終止位置:確認 TLS 是由反向代理、負載平衡入口,還是代理核心直接處理。憑證應更新在實際處理握手的那一層。
- 確認完整憑證鏈:檢查伺服器是否載入完整憑證鏈,以及憑證與私鑰是否相符。更新憑證後,確認設定已重新載入,而不只是替換磁碟上的檔案。
- 確認多個入口:若網域有多個位址或入口,請逐一檢查回傳的憑證。只要有一個入口仍使用舊憑證,就可能造成間歇性連線失敗。
- 確認本機信任狀態:將作業系統與用戶端更新至仍受維護的版本,並確認是否有企業網路 TLS 檢查機制。排查問題時不要任意安裝來源不明的根憑證。
誤用 allowInsecure:略過驗證不等於修復憑證
開關用途:在常見 TLS 設定中,allowInsecure: true 會略過一般的憑證鏈與名稱驗證,讓連線失去原有的伺服器身分保證。這無法修復 TCP 無法連線、連接埠錯誤、伺服器拒絕握手或代理驗證失敗,也不應作為長期設定。
{
"security": "tls",
"tlsSettings": {
"allowInsecure": false
}
}
片段範圍:上方僅示範常見 streamSettings 中的 TLS 驗證開關,並非完整節點設定,也未包含實際的 serverName、傳輸層與驗證參數。請勿用這段內容覆蓋現有設定;應在目前節點的 TLS 設定中確認未啟用「允許不安全連線」或「略過憑證驗證」。
- 錯誤消失代表什麼:略過驗證後錯誤消失,只能表示問題可能與憑證驗證有關,不能證明連線到了正確的伺服器。
- 建議處理方式:保持驗證啟用,修正系統時間、SNI、完整憑證鏈或伺服器憑證後,再重新測試。
- 自簽憑證情境:須明確規劃信任方式,並確認目前核心支援的憑證信任設定;不要把關閉驗證當成通用替代方案。
處理原則:恢復身分驗證後,再確認修復完成
驗收條件:保持憑證驗證啟用,讓同一節點重新連線且不再出現原本的錯誤,並確認目標服務可正常使用。只把日誌中的憑證錯誤隱藏起來,不算完成修復。
核心與協定差異:一般 TLS 與 REALITY 不適用同一套參數
協定區分:VMess、VLESS 是代理協定,是否使用 TLS 取決於傳輸層與安全層設定。不能看到 VLESS 就預設一定使用一般 TLS,也不能因介面有伺服器名稱欄位,就把所有安全層問題都當成憑證過期處理。
| 使用情境 | 優先確認項目 | 避免的錯誤操作 |
|---|---|---|
| v2rayN 桌面設定 | 目前節點實際使用的核心、TLS 欄位與底層日誌 | 把用戶端名稱當成核心名稱,套用不相符的參數 |
| v2rayNG 的 Xray 設定 | 節點安全層、伺服器名稱、憑證驗證狀態 | 把一般 TLS 的處理方式直接套用到 REALITY |
| v2flyNG 的 v2fly 設定 | 目前核心支援的協定與欄位 | 匯入依賴 Xray 專屬功能的設定後,忽略相容性問題 |
| Xray 的 REALITY 設定 | 伺服器指定的 serverName、公鑰與 shortId 等參數 | 用 allowInsecure 取代 REALITY 所需的參數檢查 |
REALITY 注意事項:REALITY 使用的驗證機制不同於一般 TLS 憑證部署,設定必須與伺服器端成套相符。系統時間仍值得檢查,但遇到相關錯誤時,應先確認安全層類型,再依對應核心要求核對參數;不要要求管理者只靠更換一般網站憑證解決所有問題。
最後複測:每次只修改一項,記錄「原始錯誤—修改項目—新日誌」。依序從系統時間、SNI、憑證鏈、伺服器與安全層相容性逐步縮小範圍;TLS 成功後仍無法連線,再檢查代理驗證、路由分流與 DNS,不要繼續關閉安全設定。
- 保留基準:記錄目前欄位與原始錯誤,並將訂閱內容保存在可信的位置。
- 逐項驗證:修正一個項目後重新連線,確認日誌是這次測試產生的。
- 還原設定:撤銷暫時的除錯變更,並保持憑證驗證啟用。
- 確認設定持續有效:重新啟動用戶端;若使用訂閱,請檢查下次更新是否再次覆寫修正。