適合使用 v2rayN、v2rayNG 或 v2flyNG,遇到 TLS 握手失敗、憑證過期或網域不符的用戶。先判斷錯誤來自更新訂閱還是連線至節點,再依序檢查時間、位址與連接埠、SNI、憑證鏈及傳輸參數。看完後即可判斷哪些設定能在用戶端修正、哪些須由節點維護者處理,以及為何不該把 allowInsecure 當成日常連線方案。
先確認 TLS 錯誤來自哪一種連線
「握手失敗」是連線結果,不代表原因只有一種。一般 TLS 連線會先解析伺服器位址、建立 TCP 連線,再協商 TLS 參數並驗證憑證;代理協定驗證與實際轉送通常在之後才發生。網域解析失敗、443 連接埠無法連線,或協定驗證遭拒,都可能讓用戶端顯示連線失敗,但這些問題無法靠修改憑證設定解決。
先確認錯誤是在什麼操作後出現。按下「更新訂閱」後出現憑證錯誤,表示問題涉及訂閱伺服器的 HTTPS 連線;選取節點後瀏覽網頁,且核心日誌出現 x509,才可能是代理出站連線的 TLS 驗證失敗。節點編輯頁的 allowInsecure 通常不會影響下載訂閱時使用的 HTTPS 驗證。
- 更新訂閱失敗:記下更新時間與訂閱服務網域,檢查系統時間及訂閱服務憑證,請勿公開完整的訂閱網址。
- 節點連線失敗:在 v2rayN 主畫面查看日誌輸出,或在 v2rayNG 選單的「日誌」中,找出同一時間的出站錯誤。
- 只有瀏覽器出現錯誤:確認報錯網域是否屬於目標網站;不要直接把目標網站的憑證錯誤歸咎於代理節點。
依錯誤原文判斷排查方向
不同核心與版本可能會在原始錯誤前後加入連線資訊。以下列出常見的核心錯誤訊息,不必與整行日誌完全一致。這些訊息有助於縮小排查範圍,但單一錯誤通常不足以證明最終原因。
錯誤:x509: certificate has expired or is not yet valid
原因與解法:裝置時間不在憑證有效期限內,或伺服器憑證確實已過期。先同步系統時間;若時間正確但問題依舊,請維護者檢查憑證有效期限,以及續期後是否重新載入服務。
錯誤:x509: certificate is valid for edge.example, not node.example
原因與解法:用戶端驗證的名稱不在憑證涵蓋範圍內。確認伺服器要求的 SNI 與憑證 SAN;不要只因連線位址是 node.example,就把 SNI 也設成該位址。
錯誤:x509: certificate signed by unknown authority
原因與解法:無法建立信任鏈,可能是缺少中繼憑證、使用自簽憑證、信任憑證庫過舊,或網路中有人替換憑證。比較不同裝置與網路的結果,再檢查伺服器是否提供完整憑證鏈。
錯誤:remote error: tls: handshake failure
原因與解法:對端拒絕 TLS 握手,可能與 SNI、協定版本、用戶端指紋或伺服器策略有關。依原始節點設定逐項還原參數,不要直接判定是憑證過期。
錯誤:tls: first record does not look like a TLS handshake
原因與解法:目標連接埠回傳的不是 TLS 資料。確認連接埠與 TLS 開關設定,例如提供明文 HTTP 的 80 連接埠,不應當成 TLS 服務使用的 443 連接埠。
EOF、connection reset by peer 與 i/o timeout 涵蓋的原因更廣,可能是連線中斷、防火牆、連接埠錯誤或伺服器無法使用。不能只看到這些字樣就略過憑證驗證。先確認 TCP 連線能否建立,再檢查 TLS 層。
檢查系統時間與節點參數的五個步驟
每次只修改一個變數,並重複相同的測試請求。先儲存原始設定,避免同時更改位址、連接埠、SNI 和指紋;否則即使最後連線成功,也無法確認是哪項設定解決問題。以下 Windows 操作路徑以 Windows 11 中文介面為例;不同桌面介面與版本的欄位位置可能不同,但欄位意義相同。
-
同步時間
在 Windows 開啟「設定」→「時間和語言」→「日期和時間」,啟用「自動設定時間」,再按一下「立即同步」。Android 通常可在「設定」→「系統」→「日期和時間」啟用自動設定時間;部分廠牌可能將選項放在「更多設定」中。請核對實際日期與時間,不要只看時區名稱。
-
確認連接埠
在 v2rayN 主畫面按兩下目前使用的節點,開啟編輯頁;在 v2rayNG 節點清單中,點選對應節點的編輯圖示。對照節點服務提供者提供的「位址」和「連接埠」。TLS 常用 443,但節點使用 8443 或其他連接埠也很正常,不要一看到憑證錯誤就一律改成 443。
-
檢查 SNI
在節點編輯頁的 TLS 或傳輸安全區域,確認「SNI」或「serverName」欄位。填入伺服器要求的網域,不要加上
https://、連接埠、路徑或空格。連線位址與 SNI 可以不同,請勿以猜測取代節點參數。 -
恢復驗證
確認「允許不安全的連線」或「allowInsecure」已關閉;正常使用時應為
false。同時還原服務提供者要求的指紋與 ALPN;若原始設定沒有這些值,不要為了消除錯誤而任意新增。 -
重新連線並查看日誌
儲存節點並重新啟動連線。v2rayNG 可先停止再重新啟動連線;v2rayN 儲存後,確認目前選取的是修改過的節點,再重新測試。記錄錯誤是否從憑證錯誤變成連線逾時或協定驗證錯誤;這表示失敗的階段已經改變。
憑證驗證依據的是實際時間點。只調整顯示的時區、卻不修正錯誤的系統時鐘,通常無法解決有效期限問題。例如系統日期停留在 2025 年,但憑證要到 2026 年才生效,就會顯示「尚未生效」;反過來,系統日期被設到未來,也可能讓仍有效的憑證被判定為過期。
# Linux:查看系統時間與同步狀態
timedatectl status
# Linux:啟用系統支援的網路時間同步,通常需要管理員權限
sudo timedatectl set-ntp true
Linux 的第二個指令須仰賴系統已提供可用的時間同步服務;設定後仍應再次查看同步狀態。macOS 可在「系統設定」→「一般」→「日期與時間」檢查是否啟用自動設定。若時間準確且只有一個節點報錯,就不必反覆調整裝置時間,應改查伺服器憑證與節點參數。
SNI、連線位址與 Host 並非同一個欄位
SNI 是 TLS 握手時用戶端傳給伺服器的名稱,常用於選擇虛擬網站與憑證。一般 TLS 設定中的 serverName 通常也用來指定憑證驗證名稱。連線位址用來找到伺服器,HTTP Host 則屬於較上層的 HTTP 請求。這三者可能相同,也可能要依服務部署需求分別填寫。
| 欄位 | 作用階段 | 填寫依據 | 常見錯誤 |
|---|---|---|---|
| 位址與連接埠 | 解析並建立連線 | 節點實際入口,例如 443 或 8443 | 把訂閱網站位址當成節點位址 |
| SNI / serverName | TLS 握手與名稱驗證 | 伺服器允許的名稱與憑證 SAN | 加上協定前綴、路徑,或任意更換網域 |
| WebSocket Host | HTTP 升級請求 | 反向代理的虛擬主機設定 | 以為修改 Host 就會自動修正 SNI |
| WebSocket path | 比對請求路徑 | 伺服器設定的路徑 | 路徑錯誤卻只檢查憑證 |
例如,入口位址是 node.example,而伺服器要求的 SNI 是 edge.example,連線仍會送往入口位址,但一般 TLS 憑證應涵蓋 edge.example。本文中的 .example 網域僅為保留網域示例,不是可用的節點。若直接使用 IP 連線,卻未設定正確的驗證名稱,而憑證只涵蓋網域,就可能發生名稱不符。
結論:先核對欄位,再更改網域
遇到名稱不符時,先向維護者確認位址、SNI 和 HTTP Host 各自應使用的值。只有憑證實際涵蓋、且伺服器接受的名稱才有效;換成知名網站的網域,無法修復一般 TLS 設定。
所謂「偽裝網域」並不是統一的技術欄位。有些設定用它表示 SNI,有些指 HTTP Host,也有些涉及 REALITY 的伺服器名稱。必須先確認傳輸安全方式:一般 TLS 的 CA 憑證驗證,與 REALITY 使用的驗證參數,並非同一套排查流程。
檢查憑證鏈、指紋與傳輸參數
瀏覽器能開啟同一個網域,不代表代理節點的 TLS 設定一定正確。瀏覽器可能連到 443,而節點連到 8443;兩次連線也可能使用不同的 SNI、入口位址或信任憑證庫。必須比對相同的入口與名稱,才有診斷價值。
- 完整憑證鏈:伺服器通常應傳送葉憑證與必要的中繼憑證。若缺少中繼憑證,部分裝置可能仍能建立信任鏈,其他裝置則會顯示 unknown authority。
- 網域涵蓋範圍:檢查憑證的 Subject Alternative Name。
*.example.com通常涵蓋a.example.com,但不涵蓋a.b.example.com,也不會自動涵蓋example.com。 - TLS 版本:TLS 1.2 與 TLS 1.3 是協定版本,不是用戶端版本號。若兩端沒有共同支援的版本或加密套件,可能在驗證憑證前就失敗。
- 用戶端指紋:Xray 的相關設定可透過指紋選項調整 ClientHello 特徵,例如
chrome。這不是伺服器憑證指紋,也不代表關閉身分驗證。請依目前使用的核心確認支援範圍。 - ALPN:
h2與http/1.1用於協商應用層協定。gRPC、WebSocket 和一般 TCP 的部署需求各不相同,不要照抄其他節點的 ALPN 清單。
若裝置已安裝 OpenSSL,可使用以下指令檢查一般 TLS 入口。範例採用保留網域,請先依自己的入口與 SNI 修改,再執行;這不是代理協定測試,也無法用來驗證 REALITY 節點是否可用。
openssl s_client \
-connect node.example:443 \
-servername edge.example \
-verify_hostname edge.example \
-verify_return_error \
-showcerts
-connect 用來指定連線目標,-servername 用來傳送 SNI,-verify_hostname 則會明確驗證名稱。只傳送 SNI 不代表已執行網域比對驗證。請查看憑證有效期限、名稱與驗證結果;工具使用的信任憑證庫也可能與用戶端不同,因此結果只能做為排查線索,不能當成唯一結論。
為什麼不該長期啟用 allowInsecure
在常見的 V2Ray/Xray 一般 TLS 設定中,allowInsecure: true 會略過正常的伺服器憑證鏈與名稱驗證。連線仍可能經過加密,但用戶端將無法可靠確認連線對象的身分。傳輸經過加密,不代表加密通訊的另一端就是預期的伺服器。
| 問題 | 啟用後可能改善嗎 | 正確處理方式 |
|---|---|---|
| 憑證過期或名稱不符 | 可能略過驗證錯誤 | 修正時間與 SNI,或更新伺服器憑證 |
| 自簽憑證不受信任 | 可能略過信任鏈錯誤 | 依受控環境需求設定可信憑證或受支援的信任方案 |
| 連接埠無法連線、連線逾時 | 無法修復網路連線問題 | 確認連接埠、網路與服務狀態 |
| 路徑或驗證參數錯誤 | 無法修復上層協定設定 | 還原正確路徑與節點憑證 |
| REALITY 驗證失敗 | 無法取代 REALITY 的驗證流程 | 確認 REALITY 專用參數與核心支援 |
若為受控診斷而暫時啟用後便能連線,只能表示憑證驗證很可能是失敗原因之一,無法證明節點安全或所有問題都已解決。診斷期間不要傳送敏感資料,完成後立即關閉,並依原始錯誤修正具體原因。較穩妥的做法是先透過日誌與憑證檢查找出問題,不要長期略過驗證,只為了「連得上」。
結論:恢復驗證後才算修復
將 allowInsecure 還原為 false,再使用同一個節點重新連線。若仍然報錯,就繼續修正時間、名稱或信任鏈;只有正常通過驗證且實際請求成功,這次憑證問題才算排除。
常見問題與故障資訊整理
電腦可以連線,Android 為什麼顯示憑證不受信任?
先讓兩台裝置使用相同的節點、SNI 與網路,並確認已啟用自動設定時間。若參數一致,請檢查系統信任憑證庫的差異,以及伺服器是否漏傳中繼憑證;不要直接照搬電腦上略過驗證的設定。
更新訂閱後突然握手失敗,需要重新安裝嗎?
先在節點編輯頁比對位址、連接埠、TLS 類型與 SNI 是否有變化,並確認選取的是新節點而非舊副本。重新安裝通常無法修復伺服器憑證過期;請先保存錯誤原文,再聯絡維護者確認設定。
為什麼換成手機熱點就正常了?
這表示網路路徑可能影響連線,但還不能直接判定原因。保持節點參數不變,分別記錄兩種網路下的錯誤;若異常網路顯示未知簽發機構,請檢查是否有 HTTPS 檢查或憑證替換,不要盲目信任來路不明的根憑證。
延遲測試通過,就代表憑證正常嗎?
不一定。TCP 延遲測試只代表連接埠連線成功,不一定有執行 TLS 驗證或代理請求。先確認測試類型,再實際發出請求並查看核心日誌;不要把單一延遲數值當成完整的連線驗收結果。
憑證已續期,為什麼用戶端仍顯示過期?
請維護者確認服務是否已重新載入新憑證,以及不同入口是否仍提供舊憑證。用戶端也應確認時間與入口位址;多台伺服器或 IPv4、IPv6 入口設定不一致,也可能造成只有部分連線失敗。
若需要進一步協助,只需提供能重現問題的最少資訊。不必貼出整份設定檔,更不要把訂閱網址放進故障截圖。可參考以下清單整理資訊,再前往本站的故障排除繼續排查;若不清楚欄位意義,可查閱概念速查。
- 用戶端名稱、實際版本、目前使用的核心名稱與版本,以及作業系統版本。
- 問題發生於更新訂閱、測試節點還是實際瀏覽,並附上發生時間與已去識別的錯誤原文。
- 連接埠、傳輸類型、TLS 或 REALITY 類型,以及 SNI 是否與連線位址一致;不要附上節點憑證。
- 系統時間是否已同步、切換網路後是否仍會發生、另一台裝置是否正常,以及已嘗試的單一設定變更。