適用於 v2rayN 桌面版、v2rayNG 與 v2flyNG Android 版連線至 TLS 節點時發生的握手與憑證錯誤。先從核心記錄判斷失敗階段,再依序檢查裝置時間、節點位址、SNI、憑證鏈與伺服器監聽設定;不要把略過憑證驗證當成修復方式。本文也會區分一般 TLS 與 REALITY,避免混用兩者的參數。
一、先判斷錯誤發生在哪個連線階段
v2rayN 是桌面用戶端介面,實際建立連線並輸出 TLS 錯誤的是它啟動的代理核心。v2rayNG 使用 Xray 核心,v2flyNG 使用 V2Fly 核心。不同核心與版本的記錄用詞可能不同,但排查順序大致相同:先確認失敗的是訂閱下載、節點連線,還是瀏覽器存取目標網站。
如果按下「更新訂閱」時出現憑證錯誤,先檢查訂閱網址所連到的 HTTPS 服務;此時修改特定節點的 SNI 通常無效。如果只有瀏覽器提示網站憑證異常,而核心記錄顯示節點連線成功,就該檢查目標網站、裝置上的 HTTPS 檢查軟體或網路登入頁面,不能直接認定是節點憑證有問題。
- 保留完整脈絡:記下錯誤時間、目前使用的節點、核心名稱,以及錯誤前後幾行記錄。分享記錄時,請遮蔽訂閱網址、使用者識別資訊與驗證資料。
- 只觸發一次請求:暫停自動測速及其他連網程式,選取一個節點後瀏覽一般 HTTPS 網頁,避免多種錯誤混在一起。
- 先看最內層錯誤:
failed to process outbound traffic只是外層描述,後面的x509、timeout或connection refused才能決定下一步怎麼查。
二、依記錄中的錯誤訊息選擇排查方向
以下保留常見的英文錯誤片段,方便逐字比對記錄。附帶的網域、日期與位址會因環境而異,不必要求整行完全相同。每次只調整一項設定,儲存後重新連線,再查看最內層錯誤是否改變。
錯誤:x509: certificate has expired or is not yet valid
原因與解法:裝置目前時間不在憑證有效期限內,可能是裝置時鐘錯誤,也可能是伺服器憑證已過期。先同步裝置時間,再比對記錄中的有效期限;若時間正確仍出現錯誤,就需要由伺服器更新並載入新憑證。
錯誤:x509: certificate is valid for …, not …
原因與解法:憑證所包含的名稱與用戶端要驗證的名稱不一致。請核對節點 SNI、憑證的 SAN 網域與伺服器虛擬主機設定,不要直接把節點 IP 當成憑證網域。
錯誤:x509: certificate signed by unknown authority
原因與解法:用戶端無法建立可信任的憑證鏈,常見原因包括缺少中繼憑證、使用自簽憑證,或裝置的信任存放區異常。公用憑證服務應補齊憑證鏈;自建私有服務則應依既定安全流程部署可信任的根憑證。
錯誤:remote error: tls: handshake failure
原因與解法:對端拒絕了握手,但單憑這行訊息無法確定原因。請對照伺服器記錄,檢查 SNI、TLS 版本、用戶端憑證需求與監聽協定,並確認請求是否抵達預期的服務。
錯誤:tls: first record does not look like a TLS handshake
原因與解法:連線的連接埠傳回了非 TLS 資料。請確認該連接埠是否實際提供 TLS,並檢查反向代理與轉送規則是否將流量導向未加密的服務。
EOF 和 connection reset by peer 也不能單獨證明 SNI 設定錯誤。這些訊息只表示連線已結束或遭重設,請搭配伺服器連線記錄、連接埠連通性,以及相同節點在其他網路環境的結果,進一步縮小問題範圍。
三、系統時間不準:先同步時間,再檢查有效期限
TLS 驗證會依據裝置實際的系統時間,判斷憑證是否仍在有效期限內。若時間早於憑證生效日或晚於到期日,驗證都會失敗。時區顯示錯誤不一定代表系統時間戳有誤;請以自動同步結果與實際日期為準,不要只把時區改成其他地區。
-
開啟時間設定
在 Windows 11 中前往「設定」→「時間與語言」→「日期與時間」,檢查年份、日期與時間。其他桌面系統請前往系統設定中的日期與時間頁面。
-
執行自動同步
開啟「自動設定時間」,再於「其他設定」中點選「立即同步」。若同步失敗,先檢查網路與時間服務是否可連線,不要反覆手動調整時鐘試誤。
-
檢查 Android 時間
在 Android 裝置中開啟「設定」,搜尋「日期與時間」,並啟用「自動設定時間」與自動設定時區。不同系統的上一層選單可能名為「系統」或「其他設定」,請以裝置上的搜尋結果為準。
-
重新建立連線
停止並重新啟動用戶端連線,再重新發出一次請求。若仍出現有效期限錯誤,請比對記錄中的目前時間、憑證生效時間與到期時間,確認是否需要伺服器更新憑證。
如果裝置每次關機後,日期都會重設為多年以前,還需檢查硬體時鐘、電池或系統時間服務。若本機時間正常,且多台裝置連線到同一節點時都顯示憑證過期,應優先檢查伺服器憑證,而不是逐一修改每台裝置的安全選項。
四、分別核對 SNI、節點位址與 Host
節點位址決定要連線的主機;SNI 是 TLS 握手時傳送的伺服器名稱,伺服器可據此選擇網站與憑證。一般 TLS 設定中的 serverName 通常也會用於憑證名稱驗證。WebSocket 的 Host 則屬於 HTTP 要求標頭,作用於不同層;不能只因這三個欄位看起來像網域,就認定它們必須相同。
| 欄位 | 用途 | 排查重點 |
|---|---|---|
| 位址與連接埠 | 確認實際連線入口 | 網域解析、連接埠監聽與轉送目標 |
| SNI / serverName | 選擇 TLS 虛擬主機,通常也作為驗證名稱 | 確認與伺服器設定及憑證 SAN 相符 |
| WebSocket Host | 選擇 HTTP 虛擬主機或路由 | 確認與反向代理接收的 Host 相同 |
| WebSocket Path | 選擇 HTTP 要求路徑 | 確認大小寫、開頭斜線與伺服器設定相符 |
在 v2rayN 主畫面中按兩下目標節點,開啟節點編輯視窗,找到 TLS 區域的「SNI」或「ServerName」欄位,依服務提供者提供的值進行核對;不同版本顯示的欄位名稱可能略有不同。v2rayNG、v2flyNG 則可從節點項目的編輯入口檢查相應的 TLS 參數。先記下原始值,不要同時修改位址、連接埠、SNI 與傳輸方式。
- SNI 只填主機名稱:例如
edge.example.net,不要加上https://、連接埠或路徑。這裡使用的是文件範例專用網域,實際上必須填入伺服器提供的名稱。 - 位址可以與 SNI 不同:連線位址使用 IP,不代表憑證也必須簽發給該 IP;若伺服器提供的是網域憑證,應依設定填入正確的伺服器名稱。
- 以 SAN 為準:憑證名稱通常透過 Subject Alternative Name 驗證。萬用字元名稱
*.example.net通常可匹配a.example.net,但不能據此推斷它也適用於根網域或多層子網域。 - 「偽裝網域」不是可以隨意填寫的欄位:這個名稱可能指 SNI,也可能指 HTTP Host。請先確認欄位的意思,不要隨便拿一個能開啟的網站網域來取代。
五、allowInsecure 與憑證鏈:恢復驗證,不要略過錯誤
allowInsecure 是核心 TLS 設定中常見的略過憑證驗證選項。啟用後,網域不符、憑證過期或信任鏈錯誤可能暫時不再阻止連線,但連線成功不代表對端身分可信。一般公用網路上的 TLS 節點應維持憑證驗證開啟,並修正真正的憑證問題。
- 用戶端:確認節點 TLS 設定中的「略過憑證驗證」未啟用;對應設定通常為
allowInsecure: false。若使用訂閱,請確認重新更新後此欄位沒有又被訂閱內容覆寫。 - 伺服器端:確認實際載入的是完整憑證鏈,通常應提供終端憑證與必要的中繼憑證,而不是只放一張網站憑證。一般不需要將根憑證附在伺服器傳送的憑證鏈中。
- 更新憑證後:檢查實際負責終止 TLS 的元件。它可能是反向代理,也可能是代理核心;請確認該元件已重新載入憑證,不能只看到磁碟上的檔案更新,就認定已完成。
- 私有憑證:只有確認簽發者與部署政策後,才能依系統或核心支援的方式設定可信任憑證。不要為不明節點匯入來源不明的根憑證。
如果同一個節點在舊裝置上顯示 unknown authority,但在新裝置上正常,可以檢查舊裝置的系統更新與信任存放區;同時也要排除伺服器缺少中繼憑證,或另一台裝置剛好已有快取的情況。安全軟體執行 HTTPS 檢查時也可能使用不同的簽發者,請依組織管理政策確認,而不是直接關閉所有防護。
六、使用命令區分連接埠不通與 TLS 設定錯誤
以下命令僅供有權限排查的一般 TLS 服務使用。請將範例網域替換為實際節點位址與 SNI,連接埠也應使用節點的實際設定;這些命令並非代理協定連線測試。Windows PowerShell 可先檢查 TCP 連接埠;若環境已安裝 OpenSSL,則可進一步檢視握手與憑證驗證結果。
# PowerShell:檢查節點 TCP 連接埠是否可連線
Test-NetConnection -ComputerName node.example.net -Port 443
# OpenSSL:連線至節點位址,傳送並驗證指定的伺服器名稱
openssl s_client -connect node.example.net:443 -servername edge.example.net -verify_hostname edge.example.net -verify_return_error -showcerts
TcpTestSucceeded: True 只表示 TCP 連線已建立,無法證明憑證可信、代理驗證正確或路由可用。OpenSSL 的 -servername 用於傳送 SNI,-verify_hostname 用於明確驗證名稱;兩者用途不同,只加上前者不足以取代完整的名稱驗證。
- TCP 連線失敗時,先檢查位址、連接埠、服務監聽狀態與防火牆,不要繼續反覆調整憑證名稱。
- TCP 連線成功但收到非 TLS 資料時,請檢查連接埠映射與反向代理入口是否設定錯誤。
- TLS 回報名稱或信任鏈錯誤時,請檢查憑證 SAN、完整憑證鏈與本機信任存放區。
- TLS 驗證通過但用戶端仍連線失敗時,請繼續核對代理協定、驗證參數、WebSocket 路徑或其他傳輸參數。
七、修復後重新測試與常見問題
重新測試時,維持相同節點、網路與目標網頁,先關閉自動切換,再重新啟動連線。確認新記錄不再出現原本的憑證錯誤後,再恢復日常路由設定。若需要服務提供者協助,提供錯誤時間、錯誤關鍵字、使用的核心與已完成的檢查即可,請勿傳送完整訂閱連結。
同步時間後仍提示憑證過期?
先確認系統時間同步確實成功,再查看記錄中的憑證到期時間。若憑證已過期,請聯絡伺服器管理者更新並重新載入憑證;同時核對 SNI,避免實際取得其他虛擬主機的舊憑證。
勾選略過憑證驗證就能連線,可以一直開著嗎?
不建議長期維持此設定。請先恢復驗證,再分別檢查有效期限、憑證 SAN 與完整憑證鏈。略過驗證後能連線,只表示檢查被繞過,無法證明連線到的是預期伺服器。
延遲測試有數值,為什麼網頁還是打不開?
不同測試可能只測 TCP,或使用不同的要求路徑。請查看實際網頁要求對應的核心記錄;若 TLS 已通過,再檢查系統代理、分流規則與 DNS,並可參考站內故障排除。
更新訂閱後,修正好的 SNI 又變回原值?
先比較更新前後的節點欄位,確認訂閱來源是否持續提供錯誤值。可以複製節點作為暫時比對,保留原始設定並聯絡服務提供者修正訂閱來源,避免每次更新後都得手動修改。
換了用戶端就正常,原本的用戶端需要重新安裝嗎?
先比對兩邊的節點欄位、核心版本、系統時間與信任存放區。同名節點不一定採用相同參數;先釐清差異再更新用戶端,通常比直接重新安裝更容易找出問題。
建議依序確認:連線入口正確、系統時間正確、SNI 與憑證相符、憑證鏈可信、代理參數一致。逐項記錄檢查結果,比同時更換 DNS、連接埠、網域與安全選項更容易找出根本原因。想了解欄位含義,可查閱術語表;首次匯入節點,則請依照用戶端設定教學操作。