MariaDB啟動SSL/TLS連線問題解法集合
這裡分享最近做MariaDB啟動SSL/TLS連線時的問題解法集合(Troubleshooting)
1. 連線時 ER_SERVER_SSL_DISABLED
這個錯誤就你的MariaDB的SSL並沒有啟用,有三個方向要查。
- 你的DB真的有啟用SSL/TLS。用mysql client連入後確認系統環境變數
- 你連入DB的使用者有設定為啟用SSL/TLS。 用mysql client連入後查看使用者的存取權限
- 你確定你連入的server真的是你認為的DB。(這最常發生在開發者本機有裝mysql然後docker又開mairadb的狀況下)
2. SSL error: Unable to get private key from '/etc/mysql/server-key.pem'
這個問題就是你的private key檔案它無法存取, 預設使用openssl生成key得時候它會是擁有者的read only狀態, 所以對開發者來說最簡單方式就是將key設定成全部可read, 就讓MariaDB可讀取;而安全的作法則是要依照mariadb的使用者與群組去做設定。
3. Client端HY000 ERR_TLS_CERT_ALTNAME_INVALID
這個問題是你的憑證的altname或CN跟URL domain不同,往前面找一下應該有細節如下,它的說明更清楚自己建立的測試環境很容易遇到這個問題,其實解法也滿簡單的就是看憑證內的CN name是怎樣的。然後去改DNS的record,以Ubuntu來說就是編輯/etc/hosts加入你的server ip跟domain來處理。
4. SELF_SIGNED_CERT_IN_CHAIN
這個問題通常是代表你DB的憑證是自己簽章的,只會發生在開發者的環境。另外一種狀況是你的client機器上的ca憑證太舊了沒有更新。
這是因為PKI的環境下,除非是公開認證過得CA機構,不然都不能採用自我簽章的憑證。程式開發者若要使用這樣的憑證,就得把憑證的路徑加入你使用client開發環境的到ca cert參數中,讓client程式只用這個ca憑證檢驗server端送來的憑證就會正常運作了。
5. sslv3 alert unsupported certificate
這個問題是你的憑證內容是錯誤的狀況。可以出現在server或client端,要定位問題的話需要往上找錯誤的細節就可以辨明。我自己發生這個狀況是使用mkcert產出server與client端的cert,發現它憑證設定的細節比較多(如下圖),只能用在server authentication,雖然可讓憑證不被濫用並增高安全性,但是對我來說真的是砸自己的腳,最後就回到用openssl產出比較簡單的憑證。可以參考我的github程式庫gencerts.sh
留言