針對遇到「憑證過期」「憑證名稱不符」「unknown authority」三類 TLS 報錯的使用者,依系統時間、SNI 與網域比對、憑證鏈完整度、allowInsecure 四項順序檢查,每項提供 v2rayN 與 v2rayNG 的具體操作位置。
TLS 握手失敗的常見報錯與檢查順序
TLS 握手是 V2Ray 建立連線的第一步。用戶端向伺服器送出 ClientHello,伺服器回傳憑證鏈,本機核心依序驗證憑證有效期、網域比對與簽發鏈。任何一環失敗,連線都會在握手階段終止,表現為「已連線但立即斷開」或核心日誌中的憑證錯誤。v2rayN 與 v2rayNG 使用同一套 Xray 核心,報錯格式一致。
建議固定檢查順序:先讀報錯原文,再核對系統時間,接著比對網域與 SNI,最後檢查憑證鏈。亂序操作最常見的後果是反覆切換節點,真正的問題卻始終沒有改變。
報錯:tls: failed to verify certificate: x509: certificate has expired or is not yet valid
原因與解法:裝置系統時間與真實時間偏差過大,落在憑證有效期之外——開啟系統自動時間同步,重啟核心後重試。
報錯:tls: failed to verify certificate: x509: certificate is valid for v2.example.com, not 203.0.113.10
原因與解法:伺服器位址填了 IP,憑證只對網域簽發——位址欄改回網域,或在 SNI 欄位填入憑證網域。
報錯:tls: failed to verify certificate: x509: certificate signed by unknown authority
原因與解法:伺服器未下發中繼憑證,本機建構不了信任鏈——伺服器端改用完整憑證鏈檔案,用戶端可暫時勾選 allowInsecure 驗證判斷。
三條報錯對應三個獨立檢查點。後續章節依此順序展開,每節末尾提供 v2rayN 與 v2rayNG 的具體操作路徑。
系統時間偏差:expired 與 not yet valid 的第一來源
憑證校驗以裝置的本地時間為準。憑證內含 NotBefore 與 NotAfter 兩個時間邊界,本機時間落在邊界之外,就會觸發「已過期」或「尚未生效」報錯。v2rayN 的核心日誌面板會印出每次握手的本機時間戳,先比對日誌時間與真實時間,偏差超過幾分鐘即可判定為時間問題。
時間同步只需兩步:開啟自動時間,再點一次「立即同步」。虛擬機與雙系統使用者需額外確認來賓系統時間在恢復執行後已刷新,暫停期間時間會停滯。
Windows 與 Android 的時間同步路徑
- Windows 11 / 10:設定 → 時間與語言 → 日期與時間,開啟「自動設定時間」並點選「立即同步」。
- Android:設定 → 系統 → 日期和時間,開啟「自動判定時間」;部分機型入口在「更多設定」下。
- 虛擬機與雙系統:恢復執行後先手動同步一次時間,避免暫停或休眠導致時間停滯。
同步完成後重啟核心再試。v2rayN 透過「核心」→「重啟核心」觸發,v2rayNG 關閉再開啟連線開關即可。若報錯消失,表示問題就是時間偏差。
SNI 與網域比對:憑證名稱不符報錯的定位
網域比對是憑證校驗的第二步。用戶端用「伺服器位址」或獨立 SNI 欄位比對憑證中的 CN 與 SAN 清單。位址填 IP 而憑證只簽給網域時,日誌出現 valid for xxx, not yyy 報錯。Xray 核心中該欄位名為 serverName,圖形介面顯示為 SNI。
{
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "v2.example.com"
}
}
}
| 伺服器位址 | SNI 欄位 | 握手結果 |
|---|---|---|
| v2.example.com | 留空 | 正常,SNI 自動取位址網域 |
| 203.0.113.10 | v2.example.com | 正常,連線走 IP,憑證依 SNI 校驗 |
| 203.0.113.10 | 留空 | 憑證名稱不符,握手終止 |
解法只有兩個方向:把位址改回網域,或保留 IP 位址並在 SNI 欄位填入憑證網域。前者適用於網域可解析的場景,後者適用於網域被污染、需要 IP 直連的場景。v2rayN 中 SNI 位於伺服器編輯視窗的 TLS 分組,v2rayNG 在伺服器編輯頁的 TLS 相關設定中填寫。
憑證鏈缺漏與 allowInsecure 的正確用法
憑證鏈由葉子憑證、中繼憑證與根憑證組成。伺服器必須下發葉子與中繼憑證,根憑證由用戶端系統信任庫提供。中繼憑證缺漏時,用戶端無法建構信任鏈,報 unknown authority。這是伺服器端設定問題,常見於只把葉子憑證寫入部署檔案的情況。
allowInsecure 的作用是跳過整條憑證校驗鏈,包括有效期、網域與簽發者。它不會修復憑證本身的問題,只讓握手通過。暫時勾選後若連線成功,表示問題確實出在憑證側;隨後應回到伺服器端修復憑證,而不是長期保留該選項。
v2rayN 中 allowInsecure 位於伺服器編輯視窗的 TLS 分組,勾選後需重啟核心生效;v2rayNG 在伺服器編輯頁的 allowInsecure 開關,切換後需斷開重連。資料仍經 TLS 加密,但憑證身分不再被驗證,中間人可替換憑證。
v2rayN 與 v2rayNG 的 TLS 設定對照
下表彙整四個檢查點在兩款用戶端中的入口,依此順序操作可涵蓋絕大多數憑證類報錯。
| 檢查項目 | v2rayN | v2rayNG |
|---|---|---|
| 核心日誌 | 主介面底部日誌面板 | 主介面日誌入口 |
| 伺服器位址 | 編輯伺服器 → 位址 | 編輯伺服器 → 位址 |
| SNI | 編輯伺服器 → TLS → SNI | 編輯伺服器 → TLS 分組 → SNI |
| allowInsecure | 編輯伺服器 → TLS → allowInsecure | 編輯伺服器 → allowInsecure 開關 |
| 重啟連線 | 核心 → 重啟核心 | 關閉再開啟連線開關 |
報錯 certificate has expired,但手機上看時間是對的
先看 v2rayN 日誌面板印出的握手時間戳,確認核心讀取的本機時間;再檢查 Windows Time 服務是否在執行,以系統管理員身分在命令列執行 w32tm /resync 強制同步。
我填了網域還是報 not valid for
確認網域與憑證 SAN 完全一致,www 前綴也算不符。用瀏覽器直接存取 https://該網域,查看憑證詳情中的「主體別名」清單逐一比對。
allowInsecure 勾上就通了,能一直用嗎
不建議。它只跳過校驗,不修復憑證;長期使用應把伺服器端憑證鏈補全,再改回 allowInsecure 關閉狀態。
憑證報錯只出現在某一個節點
該節點憑證設定有問題,換節點可暫時恢復;同時檢查該節點位址是否誤填了 IP 而憑證只簽給網域。
重啟核心後還是同樣報錯
確認伺服器清單勾選的是修改後的節點,v2rayNG 重新拉取訂閱後再試;部分機型需先同步系統時間再斷開重連。