適用於 v2rayN、v2rayNG 與 v2flyNG 中啟用一般 TLS 的節點。先保留核心日誌中的錯誤訊息,再依序檢查系統時間、伺服器位址與 SNI、憑證鏈及傳輸參數。閱讀本文後,可判斷問題出在本機設定或伺服器憑證,並整理資料供服務維護人員查核;不建議以關閉憑證驗證作為修復方式。
一、先查看完整日誌,確認問題發生在哪個階段
「TLS 握手失敗」只表示問題範圍,並非單一原因。一般連線會先解析伺服器位址、建立 TCP 連線,再進行 TLS 協商與憑證驗證,之後才進入代理協定及上層傳輸。VMess、VLESS 是代理協定名稱,不能只憑協定名稱判斷憑證是否正確。
在 v2rayN 主視窗查看日誌區域;必要時進入「設定」→「參數設定」,找到核心日誌等級並暫時設為 info。不同版本的選項位置與名稱可能略有差異。v2rayNG、v2flyNG 可從應用程式選單中的日誌頁面查看核心輸出。清除舊日誌後,只重試一個節點並記下這次連線的錯誤,避免混入其他應用程式的連線問題。
錯誤:x509: certificate has expired or is not yet valid
原因與解法:本機時間不在憑證有效期限內,或憑證本身已過期、尚未生效。先確認系統日期與時間,再請服務維護人員確認實際部署憑證的有效期限。
錯誤:x509: certificate signed by unknown authority
原因與解法:憑證鏈無法連結至用戶端信任的根憑證,可能是缺少中繼憑證、使用私有憑證,或信任存放區太舊。先確認伺服器傳送的憑證鏈,不要直接啟用略過驗證。
錯誤:tls: first record does not look like a TLS handshake
原因與解法:連線目標傳回的不是 TLS 資料,常見原因是連接埠或服務類型設定錯誤。請依訂閱服務提供的位址、連接埠與 TLS 設定逐一確認,不能只把連接埠改成 443 就當作修復完成。
日誌中的 i/o timeout、connection refused 或 EOF,都不能單獨證明憑證有問題。前兩種情況應先檢查網路是否可連線,以及服務是否正在監聽;單獨出現 EOF 代表連線提早結束,仍須配合伺服器日誌查明原因。提供日誌給他人時,請遮蔽訂閱連結、用戶識別資訊與存取權杖。
二、系統時間不準:先同步時間,再確認憑證是否過期
憑證包含生效時間與到期時間。系統日期若錯了一年,會直接超出有效期限;即使只差幾分鐘,在憑證剛簽發或即將到期時也可能驗證失敗。時區顯示不同不一定代表時鐘錯誤,應確認裝置記錄的實際時間是否準確,而非只看時區名稱。
- Windows:開啟「設定」→「時間與語言」→「日期與時間」,啟用自動設定時間,再按一下「立即同步」。確認日期、年份與時區後,重新啟動用戶端核心。
- macOS:開啟「系統設定」→「一般」→「日期與時間」,啟用自動設定日期與時間。裝置從長時間休眠恢復後,也應重新確認目前時間。
- Android:在系統設定中搜尋「日期與時間」,啟用自動設定時間與自動設定時區。確認網路連線正常後,返回 v2rayNG 或 v2flyNG 重試同一個節點。
- Linux:使用
timedatectl status查看時鐘同步狀態;使用 systemd 的系統可透過sudo timedatectl set-ntp true啟用網路時間同步。
Windows 可先在終端機查詢同步狀態。第二個指令須以系統管理員身分執行;若同步失敗,請依系統提示檢查時間服務與網路,不要連續更改節點參數。
w32tm /query /status
w32tm /resync
以上是各協定常用的連接埠,不代表你的節點一定要使用其中某個連接埠。網路封鎖 UDP 123 可能影響傳統 NTP 時間同步,但不能因此推斷代理連接埠也遭到封鎖。若系統時間正確,日誌仍明確顯示憑證過期,應由伺服器端更新並重新載入憑證;修改本機日期無法解決問題。
三、SNI、伺服器位址與 Host:分別確認三個欄位
SNI 是 TLS 握手時傳送的伺服器名稱,讓同一個位址上的服務選擇對應的憑證。v2rayN 節點編輯視窗中的「SNI」或「伺服器名稱」,通常對應核心 TLS 設定中的 serverName。用戶端也會依設定中的伺服器名稱驗證憑證身分,因此不能任意填入看起來能開啟的網站網域。
| 欄位 | 用途 | 確認方式 |
|---|---|---|
| 伺服器位址 | 決定連線至哪個網域或 IP 位址。 | 須與目前有效的訂閱資料一致,不含通訊協定前綴與路徑。 |
| 連接埠 | 決定連線至目標上的哪個服務。 | 依伺服器設定填寫,不要預設為 443。 |
| SNI / serverName | 用於選擇 TLS 服務及驗證憑證名稱。 | 使用服務提供者指定,且包含在憑證涵蓋範圍內的網域。 |
| WebSocket Host | 屬於 TLS 建立後的 HTTP 請求標頭。 | 依反向代理設定填寫,不能取代 SNI。 |
| WebSocket 路徑 | 讓反向代理將請求轉送至對應的後端。 | 逐字確認路徑與大小寫,並與憑證網域分開檢查。 |
例如,伺服器位址可以是 IP,而 SNI 是憑證涵蓋的網域,兩者不一定相同。不過,若以 IP 驗證憑證,憑證的主體替代名稱(SAN)中必須包含對應的 IP 類型項目,只有網域項目並不足夠。一般網域憑證則應檢查 SAN,也就是主體替代名稱,不能只看憑證頁面上的標題。
- SNI 請填入純網域,例如
example.com,不要加上https://、連接埠、斜線或空格。 *.example.com通常可涵蓋a.example.com,但不能因此認為它也涵蓋example.com或a.b.example.com。- 訂閱中的「偽裝網域」可能指 Host,也可能指 SNI。請先確認欄位的實際用途,不要看到「網域」就把所有欄位都填成相同值。
結論:憑證名稱不符時,先修正 SNI,不要先改 DNS
若日誌已顯示收到的憑證與預期名稱不符,表示連線至少已到達某個 TLS 服務。請先確認 SNI、目標位址與憑證 SAN;只有懷疑解析到錯誤服務時,才需要檢查 DNS 解析結果。
四、憑證鏈不完整:瀏覽器能開啟,不代表核心也能通過驗證
伺服器通常必須傳送網站憑證及必要的中繼憑證,再由用戶端使用自己的信任根完成驗證。瀏覽器可能已快取中繼憑證,或採用不同的信任機制,因此「同一個網域在瀏覽器中能正常開啟」只能作為線索,不能排除伺服器端憑證鏈設定錯誤。
- 先確認影響範圍:若同一個節點在多台時間準確的裝置上都顯示未知的憑證簽發者,請優先讓維護人員檢查部署的憑證與中繼憑證。
- 再比較裝置差異:若只有舊系統無法連線,請檢查系統更新與信任根狀態,同時記下用戶端及實際使用的核心版本。
- 檢查網路介入:若問題只在公司或機構網路,或啟用 HTTPS 檢查的安全軟體環境中出現,請聯絡網路管理員確認是否有憑證替換情況。
- 處理私有憑證:只在明確受控的部署環境中,依管理要求設定可信任的憑證;不要匯入來源不明的根憑證。
若具備命令列環境,可使用 OpenSSL 查看伺服器傳回的憑證。以下使用保留的示例網域,只示範指令格式;實際排查時,請分別將兩個網域替換成節點連線位址與預期的 SNI,連接埠也須依節點設定填寫。
openssl s_client -connect example.com:443 -servername example.com -showcerts -verify_hostname example.com -verify_return_error
-servername 用於傳送 SNI,-verify_hostname 用於指定驗證名稱,兩者用途不同。此指令使用的信任存放區可能與用戶端核心不同;若本機 OpenSSL 未正確設定可信任的 CA,指令報錯也不能直接判定為伺服器故障。複查時請著重記錄回傳憑證的 SAN、有效期限與憑證鏈,不要只截取最後一行。
五、略過憑證驗證:保持關閉,修正實際設定
「允許不安全連線」或「略過憑證驗證」通常對應 allowInsecure。啟用後,用戶端可能不再拒絕不受信任或名稱不符的憑證,但這並未修復憑證,連線對象的身分也就無法正常驗證。此設定同樣無法修復 TCP 逾時、連接埠錯誤、WebSocket 路徑錯誤或代理驗證失敗。
以下為一般 TLS 出站設定中 streamSettings 的局部示意,並非可直接匯入的完整設定,也不適用於 REALITY。example.com 僅用於說明欄位關係,實際值必須依伺服器設定填寫,不可直接使用示例網域連線至節點。
{
"streamSettings": {
"security": "tls",
"tlsSettings": {
"serverName": "example.com",
"allowInsecure": false
}
}
}
- 儲存後重新啟動核心,確認這次執行確實讀取了新設定。
- 若日誌仍顯示舊網域,請確認目前選取的節點、訂閱群組,以及修改的設定是否為正在使用的設定。
- 不要直接修改暫存產生的檔案並期待變更永久生效;用戶端下次啟動或更新節點時,可能會重新產生該檔案。
六、憑證通過後仍無法連線:檢查傳輸層與伺服器端紀錄
憑證驗證成功不代表代理連線已成功。WebSocket 的路徑與 Host、gRPC 的服務名稱,以及代理協定的使用者識別資訊,都會在各自階段參與通訊。若日誌從 x509 錯誤變成 HTTP 狀態錯誤或驗證失敗,應依新錯誤繼續排查,不要再次啟用略過驗證。
錯誤:websocket: bad handshake
原因與解法:WebSocket 升級請求未收到預期回應,可能是 Host、路徑或反向代理轉送設定不一致。請確認節點的傳輸設定,並請維護人員查看對應時間的 HTTP 存取紀錄。
錯誤:remote error: tls: handshake failure
原因與解法:遠端中止 TLS 協商,可能與 SNI 政策、協定相容性或伺服器端驗證要求有關。僅憑用戶端這行訊息無法判定原因,應配合伺服器端握手日誌查核,不能直接歸因於本機憑證存放區。
每次只修改一個欄位,再用同一個節點重試。若同時更換 DNS、SNI、核心與連接埠,即使恢復連線,也很難判斷哪個步驟有效。升級用戶端或核心前請先備份設定,並確認支援節點所需的協定與傳輸類型;不要為了消除某一則錯誤訊息而盲目切換核心。
- 本機資訊:作業系統、用戶端版本、核心名稱與版本、系統時間同步結果。
- 節點資訊:連線位址類型、連接埠、TLS 類型、SNI、傳輸類型;請遮蔽使用者識別資訊與訂閱憑證。
- 日誌資訊:一次連線失敗的確切時間與完整錯誤鏈,並註明問題發生在連線、憑證驗證或傳輸階段。
- 伺服器端查核:目前憑證的有效期限、SAN、中繼憑證部署情況,以及憑證續期後相關服務是否已重新載入。
七、常見問題:依錯誤範圍決定下一步
時間已同步,為什麼還是顯示憑證過期?
先確認錯誤來自剛才重試的節點,而不是舊日誌。檢查用戶端實際收到的憑證有效期限;伺服器端可能已更新憑證檔案,卻未重新載入服務,或只更新了部分入口。請提供失敗時間、連線位址與憑證到期時間,交由維護人員查核。
伺服器位址是 IP,SNI 就一定要填 IP 嗎?
不一定。連線位址決定資料要傳送到哪裡,SNI 通常填入服務提供者指定的憑證網域。若改用 IP 作為驗證名稱,憑證必須包含相符的 IP 類型 SAN。不要將 WebSocket Host 當成可自動取代 SNI 的設定。
啟用略過驗證後能連線,可以一直開著嗎?
這只能表示問題可能與憑證驗證有關,無法證明連線對象值得信任。請關閉此選項,再依序檢查有效期限、名稱是否相符及憑證鏈。若訂閱來源反覆寫入錯誤設定,請聯絡提供者修正,不要一再略過驗證。
所有節點都握手逾時,是不是憑證同時出問題?
不要只憑逾時就下結論。先確認系統網路與時間,再檢查用戶端是否確實發出連線、目標連接埠是否可連線,以及日誌是否明確出現 x509 錯誤。可在獲准使用的其他網路中,以同一個節點再次測試,透過網路差異縮小問題範圍。