本文適合遇到 certificate、x509、handshake、unknown authority 等記錄的 v2rayN、v2rayNG 與 v2flyNG 使用者。排查順序是先保留原始記錄,接著檢查系統時間與時區,再核對 SNI,最後驗證憑證有效期與憑證鏈;allowInsecure 僅用於短時間定位問題,不應作為長期修復方案。
TLS 錯誤發生在哪個步驟
VMess 或 VLESS 節點啟用 TLS 後,用戶端並不是一連上伺服器就開始傳輸代理資料。它必須先建立 TCP 連線,再傳送 TLS ClientHello,其中可能包含 SNI、支援的 TLS 版本與 ALPN;伺服器隨後回傳憑證鏈並協商工作階段金鑰。只有交握成功後,後續的協定驗證與資料傳輸才會進入加密通道。
因此,「節點無法連線」不等於節點帳號失效。如果記錄已出現憑證過期、主機名稱不相符或未知簽發者,問題通常早於 VMess 使用者 ID、VLESS UUID、傳輸路徑與路由規則。此時修改訂閱群組、系統代理連接埠或分流規則,通常無法消除憑證錯誤。
排查時應先開啟用戶端核心記錄,而不是只觀察瀏覽器頁面。v2rayN 可在主視窗底部的記錄區查看最近連線,也可透過「設定」→「參數設定」確認記錄層級沒有設定得過低。v2rayNG 與 v2flyNG 可進入對應設定的執行記錄頁面,保存首次出現的 TLS 或 x509 原文。
錯誤:x509: certificate has expired or is not yet valid
原因與解法:本機時間超出憑證有效期,或伺服器端憑證確實已過期——先同步系統時間,再查看記錄中的目前時間與憑證起訖日期。
錯誤:x509: certificate is valid for another.example, not node.example
原因與解法:伺服器回傳的憑證名稱與用戶端驗證名稱不一致——核對節點的 SNI,不要將訂閱備註、WebSocket 路徑或 IP 位址填入此欄位。
錯誤:x509: certificate signed by unknown authority
原因與解法:憑證鏈缺少中繼憑證,或憑證不受系統信任——更新系統憑證環境;若多台裝置同時出現問題,應由伺服器端補齊憑證鏈。
錯誤:remote error: tls: handshake failure
原因與解法:伺服器端主動拒絕交握,常見原因是 SNI、TLS 版本或 ALPN 不相符——先核對訂閱的原始參數,再檢查伺服器端的監聽設定。
第一步:檢查系統時間與時區
TLS 憑證包含 Not Before 與 Not After 兩個時間界線。用戶端會使用裝置目前時間判斷憑證是否已生效、是否已過期。系統時間快了幾個月,會將正常憑證判定為過期;慢了幾個月,則可能顯示憑證尚未生效。時區本身不會改變標準時間,但錯誤時區搭配手動校時,經常會造成實際時間偏差。
Windows 應在日期與時間設定中開啟自動設定時間與自動設定時區,然後執行一次立即同步。Linux 桌面環境可先查看系統時間狀態,確認 NTP 服務處於同步狀態。Android 裝置應啟用由網路提供的日期、時間與時區。修正後必須完全停止用戶端核心並重新啟動,避免舊連線繼續沿用失敗狀態。
-
保留原始記錄
中斷目前節點連線,清除記錄後重新連線一次,保存第一筆 x509 或 TLS 錯誤及其時間戳記,不要只保留後續的逾時資訊。
-
核對目前時間
將裝置日期、分鐘與時區和可信任的系統時間來源比對,誤差盡量控制在 60 秒內,並檢查是否誤設為手動時間。
-
執行時間同步
開啟系統自動同步;Linux 可執行
timedatectl status,確認輸出中的系統時鐘已同步,且時區設定正確。 -
重新啟動用戶端核心
在 v2rayN 中先停止服務再重新啟動;Android 用戶端則中斷目前設定,結束連線後重新連線,避免沿用舊工作階段。
-
比較複測結果
如果錯誤中的 not yet valid 消失,表示根因是本機時間;若仍顯示相同的憑證截止日期,請繼續檢查憑證是否真的已過期。
第二步:核對 SNI 與節點位址
SNI 是 TLS ClientHello 中傳送的伺服器名稱。一個 IP 位址可能承載多個網站,伺服器會依據 SNI 選擇憑證與對應的虛擬主機。節點的連線位址可以是網域名稱,也可以是 IP;但憑證驗證名稱通常必須是憑證中列出的網域,不能自行根據備註猜測。
例如,用戶端連線位址是某個入口 IP,而憑證簽發給某個網域,此時節點設定需要在 serverName 或 SNI 欄位填入該網域。反過來,如果節點位址本身已是正確網域,且訂閱明確提供 SNI,就應保留訂閱值。將 WebSocket 的 Host、HTTP 路徑、訂閱名稱或節點備註複製到 SNI,都會造成名稱不相符。
| 設定項目 | 實際作用 | 常見錯誤 |
|---|---|---|
| 位址 | 用於 DNS 解析並建立 TCP 連線 | 誤填含有協定前綴或路徑的完整網址 |
| 連接埠 | 指定伺服器端 TLS 監聽連接埠 | 將本機 10808 誤填為遠端連接埠 |
| SNI / serverName | 選擇伺服器端憑證並決定驗證名稱 | 填成 IP、節點備註或傳輸路徑 |
| Host | 用於 HTTP 或 WebSocket 請求標頭 | 認為 Host 必然與 SNI 相同 |
| Path | 指定 WebSocket 或 HTTP 傳輸路徑 | 用錯誤路徑解釋憑證名稱不相符 |
在 v2rayN 中,可雙擊目標節點或按右鍵選擇編輯伺服器,在 TLS 相關區域核對 serverName、SNI 或「偽裝網域」欄位;實際顯示名稱會隨核心與設定類型而變。修改前先保存訂閱原值,修改後只測試這一項,不要同時更換連接埠、傳輸方式與 UUID。
在 v2rayNG 或 v2flyNG 中,先中斷連線,再點選設定右側的編輯入口,找到 TLS 安全設定下的伺服器名稱或偽裝網域。若設定由訂閱產生,手動修改可能在下次更新訂閱時被覆蓋;確認正確值後,應請訂閱提供方修正來源設定。
錯誤:certificate is valid for example.net, not 203.0.113.10
原因與解法:用戶端正在依 IP 驗證憑證——將訂閱明確提供的憑證網域填入 SNI,同時保留原連線位址,不要關閉驗證來掩蓋問題。
錯誤:tls: unrecognized name
原因與解法:伺服器端不接受目前的 SNI——還原訂閱原始的 serverName;若多個用戶端都失敗,需檢查伺服器端虛擬主機與 TLS 監聽設定。
第三步:判斷憑證過期與憑證鏈不完整
系統時間與 SNI 都正確後,應檢查伺服器端實際回傳了哪張憑證。憑證過期表示 Not After 早於目前時間;憑證鏈不完整則常見於伺服器只傳送網站憑證,沒有傳送必要的中繼憑證。兩者都屬於伺服器端設定問題,重新匯入訂閱通常無法修復。
在安裝 OpenSSL 的 Linux 環境中,可以使用以下指令查看 443 連接埠回傳的憑證鏈。-connect 後填寫實際連線網域與連接埠,-servername 後填寫節點要求的 SNI。測試時必須同時保留這兩個參數,否則結果可能來自另一組預設憑證。
openssl s_client -connect server.example:443 \
-servername node.example \
-showcerts
openssl s_client -connect server.example:443 \
-servername node.example \
-verify_return_error < /dev/null
輸出中的 subject 是目前憑證主體,issuer 是簽發者,notBefore 與 notAfter 是有效期。最後一行若顯示 Verify return code: 0 (ok),表示目前系統信任環境能建立完整的驗證路徑。代碼 10 通常表示憑證過期,代碼 20 或 21 常見於無法取得本機簽發者,或無法驗證第一張憑證。
- 只有一台裝置出錯:優先更新系統時間、系統憑證環境與用戶端核心,再排除本機網路對 TLS 的干擾。
- Windows 與 Android 同時出錯:更可能是憑證過期、SNI 設定錯誤或伺服器端憑證鏈缺失。
- 同一台伺服器只有一個網域出錯:檢查該網域對應的憑證繫結與虛擬主機,不要直接修改所有節點。
- 更換網路後恢復:比較兩個網路解析到的 IP,並檢查是否存在 DNS 解析異常或透明代理介入。
- 憑證剛續期仍顯示舊日期:確認所有入口伺服器都已載入新憑證,並重新啟動或重新載入對應的 TLS 服務。
allowInsecure 能解決什麼,風險在哪裡
allowInsecure 的作用是允許用戶端接受無法通過正常驗證的伺服器憑證。它可能讓過期、自簽、名稱不相符或不受信任的憑證暫時通過,但不會修復伺服器憑證,也不會自動修正 SNI、位址、連接埠或傳輸設定。
啟用後,TLS 資料仍會加密,但用戶端失去了可靠確認伺服器身分的關鍵步驟。若攻擊者能介入網路連線,就可能使用另一張憑證冒充目標伺服器。因此,此選項適合短時間診斷:啟用後若連線立即恢復,可以確認問題集中在憑證驗證階段;得出結論後應關閉,並修正時間、SNI 或伺服器端憑證鏈。
在 v2rayN 中可編輯對應伺服器,在 TLS 區域尋找 allowInsecure 或「略過憑證驗證」。v2rayNG 與 v2flyNG 通常會在設定編輯頁的 TLS 設定中顯示「允許不安全連線」或類似名稱。只調整目前測試節點,不應批次修改所有訂閱設定。
根據記錄結果判定問題所在
一次有效的排查應只變更一個變數,並記錄修改前後的第一筆錯誤。若同時重新匯入訂閱、切換核心、修改 SNI、啟用 allowInsecure 並更換網路,即使連線恢復,也無法判斷真正原因。後續更新訂閱還可能讓問題再次出現。
建議建立最小測試集合:固定同一個節點、同一個網路與同一個用戶端核心,先同步時間,再核對 SNI,接著驗證憑證鏈,最後才暫時測試 allowInsecure。測試期間暫時關閉頻繁自動切換節點的功能,避免記錄混入其他伺服器的錯誤。
同步時間後仍提示憑證過期?
查看記錄或 OpenSSL 輸出中的 notAfter。如果截止日期確實早於目前時間,問題在伺服器端憑證;若用戶端看到的日期與伺服器端公布結果不同,請繼續檢查是否連線到舊的入口 IP。
SNI 應該填節點位址還是 Host?
填寫訂閱明確提供的伺服器名稱。若未單獨提供,通常使用憑證涵蓋的網域,不能只憑節點備註判斷;Host 與 SNI 的用途不同,不應強行設為相同。
啟用 allowInsecure 後可以連線,接下來該怎麼做?
立即保存啟用前後的記錄,然後關閉此選項。根據具體錯誤檢查憑證有效期、名稱是否相符與憑證鏈,不要讓臨時診斷設定長期留在訂閱中。
更新訂閱為什麼沒有修復憑證錯誤?
訂閱只會更新用戶端收到的節點參數。若伺服器端仍傳送過期憑證或缺少中繼憑證,重複更新也不會改變交握結果,應由伺服器端更新並重新載入憑證。
只有行動網路顯示交握失敗,該怎麼辦?
先比較行動網路與其他網路的 DNS 解析結果,再檢查系統時間是否由網路自動校準。若憑證名稱發生變化或回傳不同入口,應保存兩組記錄交叉比較。
最終判斷可濃縮為三點:時間錯誤由本機修正;SNI 錯誤依訂閱與憑證網域修正;多台裝置都收到過期憑證或不完整憑證鏈,則由伺服器端處理。只有先分開這三類問題,TLS 交握失敗才不會被誤判為連接埠、UUID、訂閱或路由分流故障。