適用於已匯入設定,但連線記錄出現 TLS 或 x509 錯誤的使用者。先確認錯誤是來自訂閱請求還是節點連線,再同步系統時間、核對伺服器位址、SNI 與憑證網域,最後檢查憑證鏈和伺服器入口。每次只修改一個欄位,並保持憑證驗證開啟,才能判斷哪些修改確實有效。
先確認錯誤位置與交握階段
「TLS 交握失敗」是結果,並非唯一原因。訂閱網址使用 HTTPS 時,更新訂閱也會進行 TLS 交握;節點啟用 TLS 時,代理核心也會與節點伺服器交握。前者失敗時應檢查訂閱網域與訂閱服務,後者失敗才需要檢查節點的 SNI。不要只因錯誤訊息有相同關鍵字,就同時修改兩處設定。
先停止連線,記下觸發錯誤的操作,再啟動連線並送出一次網頁請求。v2rayNG 和 v2flyNG 可從主畫面的側邊選單開啟「記錄」查看;v2rayN 則可查看主畫面的記錄區。各版本介面用詞可能略有不同,請保留錯誤訊息前後幾行、目標網域和連接埠,不要只截取「連線失敗」。分享記錄前,請隱藏訂閱網址、使用者識別資訊與憑證。
x509: certificate has expired or is not yet valid
原因:目前裝置時間不在憑證有效期間內,或伺服器憑證確實已過期。解決方式:先同步裝置時間,再檢查憑證的生效與到期日期;若時間正確但仍出現錯誤,請伺服器管理者更新憑證並重新載入。
x509: certificate signed by unknown authority
原因:憑證鏈無法連結至目前環境信任的根憑證,可能缺少中繼憑證,也可能使用了私有憑證。解決方式:檢查伺服器提供的完整憑證鏈及裝置的信任存放區,不要直接略過驗證。
remote error: tls: handshake failure
原因:遠端中止交握,可能與 SNI、TLS 參數、用戶端憑證要求或入口設定有關。解決方式:先核對訂閱中的原始參數,再參考伺服器記錄判斷原因;不能只憑這一行錯誤就認定憑證已過期。
如果記錄中只有 i/o timeout、connection refused 或 EOF,還不能證明發生憑證驗證錯誤。請先確認伺服器位址能否解析、目標連接埠是否可連線,以及該連接埠是否確實提供 TLS。本文後續步驟適用於明確啟用一般 TLS 的連線;REALITY 的參數與驗證方式不同,請勿直接套用。
同步系統時間:先排除憑證有效期間判斷錯誤
憑證會標示生效時間與到期時間。裝置日期若設定在未來,可能會把有效憑證判定為已過期;若設定在過去,則可能判定為尚未生效。只看時鐘上的時分並不足夠,還要確認年份、日期,以及自動時間同步是否正常。時區顯示不同不一定會造成錯誤,驗證時真正採用的是系統所代表的實際時間。
-
找到時間設定
Android 請前往「設定」→「系統」→「日期與時間」。部分裝置的選項位於「更多設定」或「一般管理」,也可以在設定搜尋欄搜尋「日期與時間」。
-
開啟自動同步
開啟「自動設定時間」與「自動設定時區」,並等待網路校時完成。如果日期仍不正確,請先檢查裝置網路與系統時間服務,不要在日期錯誤時反覆測試節點。
-
確認電腦時間
Windows 請前往「設定」→「時間與語言」→「日期與時間」,開啟自動設定時間並點選「立即同步」。macOS 請前往「系統設定」→「一般」→「日期與時間」,開啟自動設定日期與時間。
-
重新連線並保留記錄
停止用戶端連線後重新啟動,再開啟相同網頁。如果仍出現有效期間錯誤,請記下記錄中的目前時間與憑證有效期間,交由節點維護者確認憑證更新狀態。
Linux 可使用 timedatectl status 查看系統時間與同步狀態;使用 systemd 的系統可透過 sudo timedatectl set-ntp true 啟用網路校時。此命令不適用於所有發行版;若系統已使用其他時間同步服務,請依系統設定處理,避免同時啟用互相衝突的校時服務。
SNI、伺服器位址與偽裝網域有何不同
伺服器位址決定要連線至哪個 IP 或網域,連接埠則決定要連線至哪個監聽入口。SNI 是 TLS 交握時傳送的伺服器名稱,伺服器可能依此選擇憑證或後端網站;用戶端通常也會用設定的伺服器名稱驗證憑證名稱。SNI 應填寫純網域名稱,不要加上 https://、連接埠或路徑。
教學中所說的「偽裝網域」不一定指同一個欄位。WebSocket 的 Host、HTTP 請求路徑與 TLS 的 SNI 分屬不同層。依伺服器設計,這些欄位可能使用相同網域,也可能不同。Host 填了某個網域,不代表憑證一定涵蓋該網域,更不能把網頁路徑複製到 SNI。
| 欄位 | 用途 | 檢查重點 |
|---|---|---|
| 伺服器位址 | 建立底層網路連線 | 須與服務提供者指定的入口一致,可以是 IP 或網域名稱 |
| 伺服器連接埠 | 選擇遠端監聽服務 | 443 是常見的 TLS 連接埠,但連接埠號碼不能證明服務已啟用 TLS |
| SNI / serverName | 傳送 TLS 伺服器名稱,通常也用於名稱驗證 | 須符合伺服器端的預期,且位於憑證 SAN 涵蓋範圍內 |
| Host | 傳輸層使用 HTTP 時的主機欄位 | 依 WebSocket 等傳輸入口的要求填寫,不能取代 SNI |
| allowInsecure | 控制是否略過憑證驗證 | 正常使用時應保持 false,無法藉此修正憑證或網域錯誤 |
結論:位址是 IP 時,優先檢查 SNI
如果節點連線至 IP,但憑證只涵蓋網域,應將伺服器指定且受憑證涵蓋的網域設為 SNI。不要隨意改用知名網站網域,也不要只為了消除錯誤就把伺服器位址改成憑證網域,否則可能連到完全不同的入口。
名稱是否相符,主要查看憑證的 SAN。萬用字元 *.example.com 通常可匹配 node.example.com,但無法匹配根網域 example.com,也不能匹配 a.node.example.com。此處的網域僅用於說明匹配規則,並非可用節點。
各用戶端的 SNI 與憑證驗證設定位置
先記下節點原有的位址、連接埠、傳輸方式、TLS 類型、SNI 和 Host。訂閱產生的節點可能在下次更新時覆蓋手動修改,建議先複製成獨立的測試設定;若介面沒有複製選項,可先保存原始參數,再手動建立新設定。不同版本顯示的欄位可能是英文或中文,請以欄位意義為準,不要在全域設定中尋找所有節點共用的 SNI。
-
檢查 v2rayNG
在主畫面點選目標節點旁的鉛筆編輯按鈕,進入設定編輯頁。找到 TLS 區域,確認安全類型為
tls,並檢查「SNI」;「略過憑證驗證」或allowInsecure應保持關閉。儲存後重新選取該節點,再重新啟動連線。 -
檢查 v2rayN
在伺服器清單中雙擊目標節點,開啟伺服器編輯視窗。在「傳輸層安全性 (TLS)」區域確認 TLS 類型、「SNI」及「略過憑證驗證 (allowInsecure)」。後者應設為
false,儲存後重新設為使用中的伺服器並重新連線。 -
檢查 v2flyNG
在主畫面點選目標設定的編輯按鈕,進入節點設定頁,檢查 TLS 相關欄位中的
serverName或 SNI,並關閉allowInsecure。若匯入的是自訂 JSON,請檢查該設定中的 TLS 選項,不要假設一般節點表單會套用至該設定。 -
比對原始參數
逐項比對編輯頁中的內容與服務提供者的設定說明,特別確認更新訂閱後 SNI 是否遺失,以及 TLS 是否誤選成其他安全類型。每次只修正一項,然後儲存、重新連線並查看最新記錄。
v2rayNG 使用 Xray 核心,v2flyNG 使用 v2fly 核心。兩者支援的設定範圍不完全相同;測試時不要直接互換包含特定擴充功能的設定。對於一般 VMess 或 VLESS 的 TLS 連線,請先確認目前核心支援該協定與傳輸方式,再檢查憑證驗證問題。使用者識別資訊錯誤通常也不是修改 SNI 就能解決。
檢查憑證鏈與伺服器入口
時間與 SNI 都正確,但仍出現不受信任錯誤時,應檢查伺服器傳送的憑證鏈。常見原因包括只設定網站憑證,卻漏掉中繼憑證;或是憑證更新檔已更換,但實際處理 TLS 的反向代理尚未重新載入。如果前方還有中繼伺服器或 CDN,請檢查用戶端實際連線的那一層,而不只是來源伺服器上的檔案。
- 自行架設服務:檢查實際 TLS 監聽程序載入的憑證路徑、完整憑證鏈與私鑰設定,並確認設定重新載入成功。
- 訂閱節點:將完整錯誤訊息、發生時間、節點備註及使用的用戶端提供給維護者;不要傳送完整訂閱網址或驗證憑證。
- 只有一種網路連線失敗:改用另一個可信任的網路測試,並檢查是否有登入入口網站、DNS 異常或網路設備替換憑證;不要隨意安裝來源不明的根憑證。
- 只有舊裝置連線失敗:檢查系統更新與信任存放區狀態。桌面工具驗證成功,不代表 Android 上的核心一定使用相同的信任環境。
已安裝 OpenSSL 的 macOS 或 Linux 環境可使用以下命令,檢視 TLS 憑證鏈與名稱驗證結果。範例連線至保留作為示範用途的網域,不能用來驗證你的節點;實際排查時,請將連線位址、連接埠及兩處網域換成自己的參數。此命令會建立連線,但不會驗證 VMess、VLESS 認證或後續傳輸路徑。
openssl s_client -connect example.com:443 -servername example.com -verify_hostname example.com -verify_return_error -showcerts
查看輸出中的憑證有效期間、名稱與驗證錯誤。即使顯示 Verify return code: 0 (ok),也只代表這次測試環境的憑證驗證通過,不能證明代理設定整體可用。如果一般 TLS 交握成功,但用戶端仍然失敗,請繼續檢查傳輸路徑、Host、協定認證,以及用戶端實際連線的位址是否相同。
allowInsecure 與常見誤解
allowInsecure=true 會略過重要的憑證驗證,使連線無法可靠確認伺服器身分。它不會更新憑證、不會補齊憑證鏈,也不會自動修正 SNI。即使開啟後暫時可以連線,也只能據此判斷問題可能與驗證有關,不能認定設定已經修好。
關閉憑證驗證後就能連線,可以一直開著嗎?
不建議。請恢復 allowInsecure=false,依序排查時間、名稱與憑證鏈。自行架設私有憑證環境時,應透過受控方式設定信任或憑證鎖定,並確認目前核心支援,而不是長期略過身分驗證。
SNI 留白時,會自動使用伺服器位址嗎?
部分設定會根據位址推導伺服器名稱,但實際行為取決於核心與設定類型。位址是 IP 時,更不能依賴這種推導;請依服務提供者的要求,明確填入憑證涵蓋的網域,再儲存並重新連線。
瀏覽器可以正常開啟網域,為什麼節點仍出現錯誤?
瀏覽器可能連到不同連接埠、不同 IP 或不同入口,使用的信任存放區也可能不同。請先比對節點的連線位址、連接埠與 SNI;網頁可以開啟只代表該次瀏覽器連線成功,不代表節點使用相同的 TLS 路徑。
更新訂閱後又恢復原本的錯誤,該怎麼辦?
比對更新前後的 SNI、TLS 類型與連接埠。請將暫時修改保留在獨立測試設定中,並向服務提供者回報訂閱參數錯誤;不要反覆修改後又更新覆蓋,也不要把錯誤歸咎於路由分流。
節點可以連線,只有更新訂閱時出現 x509 錯誤?
檢查訂閱網址本身的 HTTPS 憑證與系統時間。節點編輯頁中的 SNI 通常不會影響訂閱請求;如果透過代理更新訂閱,也要檢查代理連線路徑,但不要一開始就修改節點的憑證驗證設定。
修復後的重新測試順序
排查完成後,先確認系統時間正常且憑證驗證已開啟,再重新啟動連線。不要只憑延遲測試結果判斷:不同測試方式涵蓋的連線階段不同,有測試結果不代表認證、傳輸與網頁請求都成功。請使用相同節點、相同網路及相同目標進行測試,減少變因。
- 確認編輯後的節點確實是目前使用中的設定,並已停止舊連線、重新建立連線。
- 送出一次實際網頁請求,檢查記錄中是否仍有同類 x509 或 TLS 錯誤。
- 如果憑證錯誤已消失,但網頁仍無法開啟,請依最新記錄檢查認證、WebSocket 路徑、Host、DNS 與路由分流,不要再反覆修改 SNI。
- 確認訂閱更新不會覆蓋修正後的參數;記錄修改項目與驗證結果,日後遇到類似問題時即可直接比對。
結論:依據最新記錄決定下一步
修正時間後,若錯誤轉為名稱不符,就繼續檢查 SNI;名稱錯誤消失後若變成傳輸失敗,就進一步排查傳輸層。依據最新的具體錯誤逐步處理,比起同時更換 DNS、連接埠、協定與憑證驗證設定,更容易找出原因。