June 9, 2020

修復SSL_do_handshake() failed 錯誤

Tags: SSLhttps | (2 min read)
修復SSL_do_handshake() failed 錯誤

最近WP網站遇到了詭異的問題,Jetpack 的統計數據與 Google Analytics 上的不一致,wordpress.com 面板上又顯示無法訪問這個站點,但是 Y Chueng 用瀏覽器打開網站又正常,很奇怪。然後本應該在昨日計劃發佈的 Post 沒有被發佈。太奇怪了。

在進一步調查時發現 Wordpress 站點健康檢測中顯示了2個問題,一個 Jetpack無法連接,一個是計劃事件無法正常運行。呀呀呀,於是去檢查 Nginx log 日誌,發現果然有錯誤(如下),只是不知道是否相關。

[crit] 4574#4574: *1894365 SSL_do_handshake() failed (SSL: error:14094085:SSL routines:ssl3_read_bytes:ccs received early) while SSL handshaking, client: 52.80.254.107, server: 0.0.0.0:443

難道是 SSL 證書出了問題?再去 Chrome 中檢視網站證書,沒發覺有問題。又去 SSL Server Test 查網站的 SSL/TLS錯誤。嘿!還真的有問題!是 SSL chain上的其中一個證書在上月底過期了。
急吼吼地去找站點證書重新生成 SSL chain。這次用的是 What's My Chain Cert? 生成SSL chain。生成好後放入主機重啓 Nginx,再去 SSL Server Test 測試就沒這個錯誤了。但是還有一個警告,說沒有 DNS CAA 。這個好辦,去 DNS 增加一條 CAA 紀錄就好。CAA紀錄的內容可以在 CAA Record Helper 中查到。

那那那就繼續觀察吧!


延伸閱讀:

  1. 設定 DNS CAA 紀錄,保護自己的 SSL/TLS 憑證 | 鸚鵡 Oh My God!
  2. Add CAA Records in the Linode Cloud Manager | Linode