TLS 憑證錯誤排除

連線時出現 x509 憑證錯誤或 TLS 交握失敗?本文帶你檢查系統時間、SNI 與偽裝網域是否相符,以及憑證鏈是否完整,並說明修正方式。

本文重點

適用於 v2rayN、v2rayNG 和 v2flyNG 中使用一般 TLS 的節點。先從連線記錄找出憑證錯誤,再依序確認系統時間、TLS 的 serverName/SNI,以及伺服器憑證鏈。每次只修改一項並重新連線,即可判斷問題出在本機設定,還是需要節點維護方處理;使用 REALITY 的節點應依其專屬參數排查,不適用一般憑證鏈的修復方式。

一、從記錄辨別憑證錯誤與連線失敗

「TLS 交握失敗」只是結果,並非具體原因。先查看 v2rayN 主視窗底部的記錄區,找出剛才那次連線的完整錯誤;如果記錄區已收合,請先展開對應面板。不同版本的介面位置可能不同,請以包含 x509、tls 或 certificate 的核心原始訊息為準,不要只看瀏覽器顯示的「連線已重設」。

選定一個節點,記下連線時間,只發出一次請求。下方英文片段是常見錯誤格式,實際記錄也可能包含核心模組名稱、連線位址及巢狀錯誤原因。分享記錄前,請移除訂閱網址、使用者識別資訊和瀏覽目標中的敏感內容。

錯誤:x509: certificate has expired or is not yet valid

原因與解法:本機時間不在憑證有效期限內,或伺服器憑證確實已過期。請先同步本機時間,再確認憑證的有效起訖日期。

錯誤:x509: certificate is valid for example.com, not www.example.com

原因與解法:用來驗證的名稱不在憑證涵蓋範圍內。請確認節點要求的 SNI 與憑證 SAN;不能只因網域名稱相似就直接替換。

錯誤:x509: certificate signed by unknown authority

原因與解法:憑證鏈無法連結至受信任的根憑證,可能缺少中繼憑證,或使用了未受信任的簽發者。請檢查伺服器提供的完整憑證鏈及本機信任存放區。

二、同步系統時間,再確認憑證是否過期

TLS 會比較目前時間與憑證的 notBefore、notAfter。電腦斷電後時鐘重設、虛擬機還原舊快照,或手動修改日期,都可能讓仍有效的憑證被判定為「尚未生效」或「已過期」。請先確認年月日與分鐘,不要只看工作列顯示的小時。

  1. 確認日期與時間

    在 Windows 11 開啟「設定」→「時間與語言」→「日期與時間」,確認日期、時間及目前時區,並與另一台時間同步正常的裝置比較。

  2. 立即同步

    開啟「自動設定時間」,再於「其他設定」中點選「立即同步」。如果同步失敗,請先恢復一般網路連線,再重新嘗試使用系統時間服務。

  3. 重新連線

    回到用戶端,重新啟用目前節點並發出新請求。請以新的記錄為準,不要繼續根據同步前留下的舊錯誤判斷。

  4. 檢查有效期限

    時間正確但仍顯示憑證過期時,請查看伺服器實際傳回的憑證有效期限。如果目前時間確實晚於 notAfter,須由維護方更新憑證,並讓 TLS 服務重新載入。

在 Android 的系統「設定」中搜尋「日期和時間」,並開啟自動設定時間;實際選單會因裝置系統而異。時區會影響時間的顯示方式,只要底層絕對時間正確,單純選擇其他時區通常不會造成憑證錯誤。反之,手動把時鐘調回過去,即使暫時恢復連線,也會影響其他服務,不能當作修復方式。

443 / TCP
常見 TLS 伺服器連接埠,實際設定請以節點資料為準
123 / UDP
NTP 時間同步常用連接埠,並非代理連接埠

時間同步與節點連線是兩條不同的網路路徑。節點使用 443 連接埠,不代表時間同步也使用該連接埠;排查同步服務的網路規則時,請確認實際使用的時間來源與通訊協定,不要因此任意開放本機的輸入連接埠。

三、確認 SNI、伺服器位址與 Host

節點的「位址」、TLS 的「伺服器名稱」和 WebSocket 的「Host」並不相同。伺服器位址決定連線目的地;SNI 位於 TLS 交握過程中,可協助伺服器選擇網站及憑證;HTTP Host 或 HTTP/2 的 authority 則屬於應用層請求。修改 Host 不會自動變更憑證驗證所使用的名稱。

欄位用途確認重點
位址、address指定遠端連線目標可填網域名稱或 IP;連接埠請另外填寫
serverName、SNI傳送 TLS 伺服器名稱,通常也用於名稱驗證使用維護方指定且涵蓋於憑證中的主機名稱
Host傳輸層 HTTP 請求中的主機欄位依伺服器的 WebSocket 或反向代理設定填寫
SAN憑證允許驗證的網域名稱或 IP 清單名稱必須符合憑證的比對規則

在 v2rayN 主視窗中按兩下節點,開啟伺服器編輯視窗,確認傳輸安全性設為 TLS,再檢查「SNI」或對應的伺服器名稱欄位;不同版本的欄位標籤可能不同,請依 serverName 的意義確認。v2rayNG 可從節點卡片的編輯入口檢查 TLS 設定中的 SNI。請勿在主機名稱欄位中填入 https://、:443 或 URL 路徑。

結論:名稱不相符時先修正 SNI,不要先換 DNS

如果記錄已明確指出「憑證適用於 A,但目前驗證的是 B」,請先確認 B 是否填錯。只有在名稱設定正確,卻連到錯誤伺服器或收到錯誤憑證時,才繼續檢查 DNS 解析結果、反向代理及網站選擇設定。

四、檢查憑證鏈與伺服器實際傳回的內容

「unknown authority」不等於「憑證過期」。網站即使使用有效的網域憑證,若漏送中繼憑證,用戶端仍可能無法建立完整的信任鏈。瀏覽器可以正常連線,也不能完全排除此問題:瀏覽器與代理核心使用的信任存放區、快取或取得中繼憑證的方式可能不同。

如果系統已安裝 OpenSSL,可以使用以下命令檢查伺服器。此處的 example.com 是保留的範例網域,並非本站節點;執行前請將命令中的網域與連接埠改成實際值。連線位址與 SNI 不同時,-connect 請填入實際連線目標,-servername 和 -verify_hostname 則填入預期的 TLS 主機名稱。

openssl s_client -connect example.com:443 -servername example.com -showcerts -verify_hostname example.com -verify_return_error

維護方應在實際終止 TLS 的服務上設定完整憑證鏈。例如前方有反向代理時,應更新反向代理載入的憑證,而非只修改後端核心目錄中的檔案。更新憑證後,還要重新載入相關服務,再從外部重新進行交握,確認傳回的是新憑證。

五、修復後以相同條件重新測試

排查時若同時更換節點、修改 SNI、切換 DNS 並啟用 Tun,測試結果就無法比較。請保留相同節點與測試目標,每次只調整一個變因。依照以下順序操作,可分辨問題是否因設定修正而解決,或只是剛好換到可用路線。

  1. 記錄基準:記下目前節點位址、連接埠、TLS 類型和 SNI,並保留錯誤發生時間;請勿公開節點憑證資料。
  2. 同步後重測:保持節點參數不變,只同步系統時間。若有效期限錯誤消失,再確認是否仍有名稱或信任鏈錯誤。
  3. 修正名稱後重測:依維護方提供的值修正 SNI,重新連線,並檢查新記錄中的驗證名稱是否符合預期。
  4. 切換網路比對:使用同一裝置和同一節點,在另一個網路上測試。只有特定網路傳回不同憑證時,再檢查網路攔截、DNS 解析及中間設備。
  5. 確認修正持續有效:更新訂閱並重新開啟用戶端後再測一次,確認修正值是否被訂閱覆寫,或伺服器是否仍傳回舊憑證。

若時間與 SNI 都正確,仍顯示憑證過期或憑證鏈不完整,用戶端能處理的範圍就有限。提供錯誤原文、測試時間、用戶端與核心版本、連線連接埠及預期 SNI 給維護方,通常比只傳「節點不能用」的截圖更容易找出問題。其他網路與核心問題請參閱排查手冊。

六、常見問題:略過驗證與交握中斷

啟用 allowInsecure 或「略過憑證驗證」能解決問題嗎?

這會略過身分驗證,並不會修正時間、網域或憑證鏈。即使連線恢復,也只能表示憑證驗證可能與故障有關,無法證明連線到正確的伺服器。請保持驗證功能開啟,依記錄修正實際原因,不要將此選項作為長期設定。

只有 TLS handshake failure,沒有 x509 錯誤,接下來要檢查什麼?

請先確認用戶端的 TLS 類型是否與伺服器一致,再檢查 SNI、ALPN 和傳輸方式。伺服器也可能在傳送憑證前主動中斷連線。此時需要參照伺服器記錄,不能直接判定是系統時間錯誤,也不建議先降低 TLS 安全設定。

瀏覽器可以開啟節點網域,為什麼用戶端仍然報錯?

瀏覽器使用的位址、連接埠、DNS 解析結果和 SNI 可能與節點不同,瀏覽器也可能快取了中繼憑證。請務必比對相同目標和相同名稱。能開啟網域首頁,只代表該次瀏覽器請求成功,不能取代節點 TLS 參數檢查。

REALITY 節點也需要檢查一般憑證鏈嗎?

REALITY 與一般 TLS 的設定及驗證機制不同。請先確認傳輸安全性類型,再檢查伺服器要求的 serverName、公鑰、shortId 等參數。不要把一般 TLS 的憑證更新步驟直接套用到 REALITY,也不要為了消除錯誤而任意改成 TLS。

用戶端下載