適用於 v2rayN、v2rayNG 與 v2flyNG 連線節點時遇到的 TLS 握手及憑證驗證問題。先從核心記錄判斷是連線逾時、憑證日期錯誤還是網域名稱不符,再依序檢查系統時間、節點位址、SNI、傳輸參數與伺服器憑證鏈。排查時一次只修改一項,保留憑證驗證功能;不要把啟用 TUN 模式當成修復握手問題的通用方法。
一、先確認問題出在哪個環節
TLS 握手發生在建立安全連線的過程中,通常早於實際資料傳輸。節點清單測得到延遲,不代表 TLS 驗證已通過:TCP 連線測試可能只能證明連接埠可連線,無法確認憑證、身分驗證及代理轉送都正常。VMess、VLESS 是代理協定名稱,TLS 則是安全層選項,兩者不可混為一談。
在 v2rayN 主視窗底部的記錄區查看連線失敗前後的訊息;Android 裝置可從側邊選單開啟「記錄」。不同版本的功能入口可能有所調整,請以目前介面為準。先清除舊記錄或記下時間,再只發起一次連線,避免把訂閱下載、節點連線和目標網站的錯誤誤認為同一個問題。
錯誤訊息:x509: certificate has expired or is not yet valid
原因:本機時間不在憑證有效期限內,也可能是伺服器憑證確實已過期。解決方法:先同步本機時鐘,再比對記錄中的目前時間與憑證有效期限;若時間正確仍然失敗,請節點維護方檢查憑證。
錯誤訊息:x509: certificate signed by unknown authority
原因:憑證鏈無法連結至受信任的根憑證,可能是缺少中繼憑證、使用自簽憑證,或本機有 HTTPS 檢查機制。解決方法:檢查系統更新、網路環境和伺服器完整憑證鏈,不要直接關閉憑證驗證。
錯誤訊息:remote error: tls: handshake failure
原因:對端拒絕握手,可能是 SNI、TLS 參數或入口服務設定不相符。解決方法:依照原始節點設定核對安全層與傳輸方式,並請維護方查看同一時間的伺服器記錄。
如果記錄只有 i/o timeout、connection refused 或 EOF,還不能判定是憑證問題。應先確認節點位址能否解析、遠端連接埠是否可連線,以及該連接埠是否確實提供 TLS 服務。記下完整的錯誤訊息,比只截取最後一個單字更有幫助。
二、校正系統時間後再試著連線
憑證有明確的生效與到期時間。本機日期若錯到前一年,或虛擬機從舊快照還原後時鐘偏移,都可能讓有效憑證被判定為「尚未生效」或「已過期」。先校正時間,再檢查節點參數,可以避免修改許多原本正確的設定。
-
檢查日期
在 Windows 11 開啟「設定」→「時間與語言」→「日期與時間」,確認年月日和目前時間。不要只查看工作列上的時、分。
-
同步時間
開啟「自動設定時間」,再到「其他設定」按一下「立即同步」。如果同步失敗,先確認目前網路能正常連線至時間服務;由組織管理的裝置則應遵循管理員設定。
-
檢查 Android 時間
Android 通常可在「設定」→「系統」→「日期與時間」開啟「自動設定時間」和「自動設定時區」。部分裝置會將入口放在「更多設定」,也可以使用系統搜尋「日期與時間」快速找到。
-
重新查看記錄
校正時間後,停止並重新啟動用戶端連線,再發起一次連線。若仍出現日期錯誤,請比對記錄中憑證的有效期限,避免反覆更換節點傳輸參數。
macOS 可在「系統設定」→「一般」→「日期與時間」檢查自動設定;Linux 則可使用下方指令查看時鐘與同步狀態。時區主要影響時間的顯示方式,憑證驗證比較的是絕對時間;單純將顯示時區改成本地時區,無法修正系統時間錯誤。
timedatectl status
判斷方式:先確認時鐘,再修改節點
如果多個不同來源的 TLS 節點同時出現憑證日期錯誤,請優先檢查本機時鐘;如果時間正確,只有一個節點顯示憑證過期,請將錯誤時間和節點資訊提供給維護方處理。
三、分清伺服器位址、SNI 與 Host
在 v2rayN 節點清單中,雙擊目標節點開啟編輯視窗,找到「位址」、「連接埠」,以及 TLS 區域中的「SNI」或「伺服器名稱」欄位。v2rayNG 和 v2flyNG 可透過節點右側的編輯入口查看對應參數。欄位名稱可能隨版本和協定而異,不要為了比對畫面截圖而切換協定類型。
| 欄位 | 用途 | 確認方式 |
|---|---|---|
| 伺服器位址 | 決定用戶端要連線至哪個 IP 或網域 | 比對訂閱中的原始值與 DNS 解析結果,不要附加網頁路徑 |
| 遠端連接埠 | 指定服務的監聽入口 | 依伺服器設定填寫,不要因為使用 TLS 就一律改成 443 |
| SNI / serverName | 通常用於在握手時告知網域,並作為憑證名稱的驗證依據 | 使用維護方提供的網域,並確認憑證涵蓋該名稱 |
| WebSocket Host | 用於比對 HTTP 要求的虛擬主機 | 需符合反向代理或 CDN 設定,不能視為 SNI 的替代品 |
| WebSocket Path | 決定要求要轉送至哪個路徑 | 確認大小寫與開頭的斜線,不要填入 SNI |
例如,憑證涵蓋 edge.example.net,但 SNI 填寫為 other.example.net,就可能造成名稱不符。SNI 應填寫純網域,不要加上 https://、連接埠或 /ws。此處的網域僅為欄位格式範例,不是可用節點,不能直接用來連線。
伺服器位址使用 IP、SNI 使用網域的組合是可行的,前提是對端設定與憑證相符。使用 IP 連線時,如果沒有設定正確的驗證名稱,用戶端可能會使用 IP 驗證憑證,而一般網域憑證通常不會包含該 IP。介面中的「偽裝網域」不能任意填寫,仍須確認它對應的是 HTTP Host 還是 TLS 伺服器名稱。
四、檢查憑證鏈與傳輸安全類型
確認本機時間和 SNI 正確後,再檢查系統信任設定與伺服器憑證鏈。舊版系統缺少根憑證更新,或伺服器只傳送網站憑證、漏掉中繼憑證,都可能導致驗證失敗。即使瀏覽器能開啟相同網域的網頁,也不能完全排除問題:瀏覽器與代理核心可能使用不同的信任來源,或採用不同的憑證鏈補齊方式。
- 只有一台裝置連線失敗:檢查系統日期、系統更新和受管理的根憑證政策;也可在獲准的其他網路環境重試,確認是否涉及網路端的 HTTPS 檢查。
- 所有裝置連同一個節點都失敗:請維護方檢查憑證到期時間、完整憑證鏈、涵蓋的網域,以及更新憑證後是否重新載入服務。
- 最近變更過傳輸設定:重新核對 TCP、WebSocket、gRPC 與 TLS 是否啟用。對一般 HTTP 連接埠發送 TLS 握手,不會因為修改 SNI 就自動修復。
- 訂閱還原後又出現錯誤:檢查是否曾手動修改節點。更新訂閱可能會覆蓋本機變更,應修正訂閱來源,而非依賴每次更新後手動補上參數。
如果記錄顯示 REALITY 驗證失敗,請優先從可信來源重新匯入完整設定,再確認用戶端和核心是否支援該設定。不要把安全類型從 REALITY 改成 TLS 碰運氣,也不要將公鑰填入憑證網域欄位。
五、為什麼不應略過憑證驗證
節點編輯頁中的「允許不安全連線」、「略過憑證驗證」,或設定中的 allowInsecure,會改變用戶端驗證伺服器身分的方式。即使資料仍經過加密,也不代表對端身分可信。憑證錯誤、連線入口錯誤,甚至連線遭到替換,都可能因此不再觸發原本的憑證警告。
- 日期錯誤就應校正系統時鐘,伺服器憑證過期就應更新憑證,不要讓用戶端忽略過期狀態。
- 網域名稱不符時,應檢查 SNI 和憑證涵蓋範圍,不要將關閉驗證當成長期設定。
- 若自建服務確實需要使用私有信任,應先充分了解憑證的發佈方式與信任範圍再進行設定;不要匯入陌生人提供的根憑證。
- 如果為了排查問題而暫時變更此選項,完成後應恢復憑證驗證並重新測試,確認最終設定仍能正常連線。
啟用系統代理或 TUN 模式,改變的是流量進入代理的方式,通常無法修復節點本身的憑證錯誤。如果錯誤其實來自訂閱網址的 HTTPS 要求,應檢查訂閱網域和更新時使用的網路;這與目前節點的 TLS 握手是兩條不同的連線,修改節點 SNI 無法修復訂閱網站的憑證問題。
六、常見問題與排查記錄
時間已同步,為什麼仍顯示憑證過期?
重新連線並查看新記錄,確認不是舊訊息。如果系統日期正確,而錯誤訊息中的到期時間確實已過,請節點維護方更新憑證並重新載入相關服務,不要繼續調整本機時區。
訂閱中的 SNI 是空白,需要補上嗎?
先確認伺服器位址是否為網域,以及目前核心是否會據此推算伺服器名稱。欄位空白不一定有問題;如果記錄明確指出名稱驗證失敗,請向維護方確認正確的 SNI,不要直接抄用其他節點的網域。
手機能連線、電腦不能,該先改什麼?
先比對兩端的節點位址、連接埠、SNI、安全類型和傳輸參數,再檢查電腦時間與系統信任設定。保留原始設定,每次只改一項。不要因為 Android 裝置能用,就忽略桌面核心與設定的相容性。
怎麼提供資訊給維護方,才能有效排查?
提供用戶端與核心版本、錯誤發生時間及包含前後文的錯誤原文,並說明是否已同步時間、是否所有節點都無法連線。請遮蔽訂閱連結、UUID、密碼和認證資訊;不要直接傳送完整設定檔。
完成排查後,使用相同節點和相同連線目標重新測試,確認新記錄不再出現相同錯誤,再恢復日常路由分流。如果仍然失敗,請簡要記下「修改了什麼、錯誤是否改變」:例如憑證日期錯誤變成連線逾時,就是新的排查線索,不要重複進行相同的憑證操作。