適用於 v2rayN、v2rayNG 使用一般 TLS 節點時遇到的憑證與握手錯誤。先從記錄判斷是憑證驗證失敗還是網路逾時,再校正系統時間、確認 SNI,最後檢查憑證鏈與 ALPN。每次只調整一個項目並重新連線,避免把伺服器憑證問題誤判為用戶端設定錯誤。
1. 先分辨憑證錯誤與握手逾時
TLS 握手發生在代理協定交換資料之前。用戶端先連線至伺服器,再送出握手參數、驗證伺服器身分並協商加密連線;任何一步失敗,都可能在外層記錄中顯示為「連線失敗」。因此不要只看最後一行,應往前找出包含 x509、tls 或具體網路錯誤的原因鏈。
在 v2rayN 主視窗底部的記錄區,記下一次連線失敗的時間和節點名稱。在 v2rayNG 主畫面選單中開啟「記錄」,重新連線後查看新增的記錄。不同版本的選單名稱可能略有不同,但排查重點相同:找出同一次連線中最具體的底層錯誤,而不是反覆查看「重試全部失敗」之類的摘要訊息。
錯誤:x509: certificate has expired or is not yet valid
原因與處理方式:裝置時間不在憑證有效期間內,或伺服器憑證確實已過期。先同步裝置時間,再核對記錄中的有效期限;不能只憑這則訊息判斷是哪一端出問題。
錯誤:x509: certificate is valid for example.com, not edge.example.net
原因與處理方式:範例中用來驗證的名稱與憑證涵蓋的網域不符。請確認節點提供的 SNI,並檢查伺服器是否傳回正確網站的憑證。
錯誤:x509: certificate signed by unknown authority
原因與處理方式:憑證無法建立通往受信任根憑證的驗證鏈。請檢查伺服器是否提供完整的中繼憑證,並確認裝置的信任存放區是否過舊,或網路中是否有憑證遭到替換。
錯誤:i/o timeout
原因與處理方式:某次網路讀寫超過等待時間。請根據前文判斷逾時發生在連線階段還是握手階段,再檢查位址、連接埠、防火牆和服務狀態,不要直接歸因於 SNI。
2. 系統時間不同步:先校正時間,再重新連線
憑證有生效時間和到期時間。裝置日期落後幾個月,可能會顯示「尚未生效」;日期超前,則可能顯示「已過期」。TLS 驗證比較的是實際時間點;時區顯示不同,不一定代表系統時鐘錯誤。不過,手動調整時區後又手動修改時間,容易造成實際時間偏差。
- Windows 11:前往「設定」→「時間與語言」→「日期與時間」,開啟「自動設定時間」,確認時區後按一下「立即同步」。同步完成後,確認年份、日期和分鐘都正確。
- 查看同步狀態:在終端機執行下方的查詢命令,確認時間來源與最近一次成功同步的時間。如需強制重新同步,請以系統管理員權限執行第二條命令。
- Android:前往系統「設定」→「系統」→「日期與時間」,開啟「自動設定時間」和自動時區;部分裝置的選項位於「更多設定」。重新連上網路後,確認時間已更新。
- 重新測試:中斷連線後重新連上目前使用的節點,再發出一次連線請求。校正時間不會自動修復先前失敗的連線,請查看新記錄確認結果。
w32tm /query /status
w32tm /resync
如果 Windows 顯示時間服務未啟動,請先在「服務」中檢查 Windows Time 的狀態;受組織管理的電腦應遵循管理員設定的時間來源,不要任意替換。如果每次關機後日期都會重設,也應檢查裝置韌體時鐘與硬體狀況。若時間正確,錯誤仍指出憑證過期,應由伺服器端更新憑證並重新載入服務。
判斷方式:時間恢復正常後仍顯示過期,就檢查伺服器端
確認裝置目前時間不在憑證有效期間內,且時間同步正常後,將記錄中的到期日期提供給節點維護人員;繼續切換本機路由規則無法延長憑證有效期。
3. SNI 與 serverName:確認網域,不要直接填入連線 IP
SNI 是用戶端在握手時送出的伺服器名稱,可協助同一個位址上的服務選擇憑證與網站。一般設定中的 tlsSettings.serverName 通常同時用於送出 SNI 和驗證憑證名稱。它不等同於節點連線位址,也不等同於 WebSocket 的 HTTP Host;三者可能相同,也可能依伺服器部署方式而異。
| 欄位或概念 | 用途 | 檢查重點 |
|---|---|---|
| 伺服器位址 | 決定實際連線的主機或 IP | 確認位址可解析,連接埠與節點說明一致 |
| SNI / serverName | 選擇 TLS 網站,並參與憑證名稱驗證 | 使用節點提供的網域,不要加上通訊協定或路徑 |
| 憑證 SAN | 列出憑證可供驗證的名稱 | 必須涵蓋用戶端驗證的目標名稱 |
| WebSocket Host | 參與 HTTP 請求與反向代理的流量分流 | 依傳輸設定填寫,不能取代 SNI |
在 v2rayN 中按兩下目標伺服器列,開啟節點編輯視窗,檢查 TLS 區域中的「SNI」或「伺服器名稱」;在 v2rayNG 中點選節點編輯圖示,檢查 TLS 區域的對應欄位。欄位名稱可能因版本和節點類型而異,請以訂閱提供的設定為準,不要把連線位址、偽裝網域和 SNI 一律改成相同字串。
- 填寫純網域名稱,例如
edge.example.com,不要填入https://edge.example.com/,也不要加上:443。 - 如果節點透過 IP 連線,但憑證是簽發給網域,通常仍需填入服務提供者指定的網域;不要直接以該 IP 取代 SNI。
- 萬用字元憑證
*.example.com通常涵蓋edge.example.com,但不涵蓋example.com或a.edge.example.com。 - 訂閱更新可能會覆蓋手動修改的內容。暫時測試前,先複製節點並加上清楚標記,避免下次更新後遺失排查紀錄。
以下僅示範一般 TCP + TLS 的 streamSettings 片段,並非可獨立執行的完整設定。範例網域僅用於說明欄位,實際使用時應替換為節點提供的值;若使用 WebSocket 或其他傳輸方式,請保留原有傳輸類型與對應設定。
{
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "edge.example.com",
"allowInsecure": false
}
}
}
4. allowInsecure 與憑證鏈:保留身分驗證
allowInsecure 不是「相容模式」或「加速開關」。在一般 TLS 設定中,將它設為 true 會略過重要的憑證驗證,讓過期、名稱不符或不受信任的憑證不再遭到正常攔截。這或許能掩蓋問題,卻無法證明連線到的是預期伺服器,也無法修復網路逾時。
在節點編輯畫面中檢查「略過憑證驗證」或「允許不安全連線」選項,日常設定應保持關閉,對應值為 allowInsecure: false。若舊設定曾開啟此選項,恢復驗證後出現憑證錯誤,就應依錯誤內容繼續查證,而不是重新開啟選項當作長期處理方式。
- 名稱不符:先確認 SNI;如果設定正確,伺服器可能載入了預設網站的憑證,需檢查虛擬主機設定。
- 未知簽發者:伺服器應提供完整的中繼憑證鏈。一般而言,公開受信任的憑證不需要使用者另外匯入私人根憑證。
- 只有一台舊裝置失敗:更新系統與受支援的用戶端版本,並檢查系統信任存放區;不要為了單一節點匯入來源不明的根憑證。
- 切換網路後憑證改變:檢查公共網路的登入頁面、企業代理伺服器或安全軟體的 HTTPS 檢查功能;必要時向網路管理員確認。
5. ALPN 與逾時:依伺服器傳輸需求設定
ALPN 用於在 TLS 握手期間協商應用層通訊協定,常見值為 h2 和 http/1.1。它不是節點通訊協定名稱,也不是選項越多越好。使用 HTTP/2 的 gRPC 傳輸需要相應的 HTTP/2 支援;傳統 WebSocket Upgrade 通常使用 HTTP/1.1,實際情況則取決於伺服器和反向代理的部署方式。
- 先確認節點的傳輸類型,再依服務提供者的說明設定 ALPN;若沒有明確要求,不要為了測試而強制限定單一通訊協定。
- 如果記錄出現
tls: no application protocol,請檢查用戶端提供的 ALPN 是否與伺服器允許的通訊協定有交集。 - 如果記錄只有逾時,請先確認實際使用的伺服器連接埠。例如節點設定為
8443時,測試443成功並不能證明該節點可用。 - 保持節點參數不變,分別使用目前網路和另一個可用網路重新測試;若結果不同,應優先檢查網路路徑與存取限制。
Windows 可使用下方命令測試與指定連接埠的 TCP 連線。範例網域和連接埠僅用來示範命令格式,請替換為節點的實際值。TcpTestSucceeded: True 只代表 TCP 連線已建立,不表示 TLS 憑證、ALPN 或代理驗證設定正確。
Test-NetConnection -ComputerName edge.example.com -Port 443
判斷方式:TCP 連得上,不代表 TLS 可用
連接埠測試成功後仍出現憑證錯誤,請回頭檢查時間、SNI 和憑證鏈;如果連接埠測試失敗,則先檢查位址與網路,不要同時修改 ALPN、傳輸路徑和驗證參數。
6. 常見問題與修復後的驗證
電腦時間只差幾分鐘,也會連線失敗嗎?
如果時間剛好接近憑證的生效或到期界線,幾分鐘的差異也可能影響驗證。先同步時間並重新連線,再查看新記錄;不要手動調慢時間來繞過已過期的憑證。
瀏覽器能正常開啟網域,為什麼節點仍然報錯?
瀏覽器可能連到不同的連接埠、位址或網站。請比對節點實際連線的位址、連接埠和 SNI;瀏覽器顯示憑證正常只能作為參考,不能取代節點握手驗證。
重新安裝 v2rayN 能修復憑證問題嗎?
重新安裝無法修正伺服器憑證過期、SNI 填錯或裝置時間不準。先記下具體錯誤;只有確認是舊版本相容性或本機檔案異常時,才考慮更新用戶端並匯入正確設定。
Android 連線失敗、桌面版正常,應先改哪裡?
先確認兩台裝置使用相同節點、SNI 和傳輸參數,再比較自動時間設定與系統更新狀況。讓兩台裝置連上同一個網路後重新測試,可降低網路差異對判斷的影響。
完成修正後,重新連上節點並實際發出一次連線請求,確認新增記錄不再出現憑證驗證或握手錯誤,再檢查應用程式是否恢復連線。若 TLS 已完成但仍無法存取,請繼續檢查代理協定驗證、傳輸路徑和路由設定,不要反覆修改已確認正確的 SNI。
- 保留排查紀錄:記下用戶端版本、核心版本、失敗時間、網路環境和具體錯誤,不要只寫「連不上」。
- 恢復安全設定:確認已關閉略過憑證驗證,並移除為了測試而新增、但沒有依據的參數。
- 提供必要資訊:向維護人員提供憑證錯誤與連接埠狀況;對外分享記錄前,請隱藏訂閱網址、驗證資訊和個人網路位址。