MariaDB啟動SSL/TLS連線問題解法集合

 這裡分享最近做MariaDB啟動SSL/TLS連線時的問題解法集合(Troubleshooting)

1. 連線時 ER_SERVER_SSL_DISABLED


這個錯誤就你的MariaDB的SSL並沒有啟用,有三個方向要查。

  1. 你的DB真的有啟用SSL/TLS。用mysql client連入後確認系統環境變數
  2. 你連入DB的使用者有設定為啟用SSL/TLS。 用mysql client連入後查看使用者的存取權限
  3. 你確定你連入的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

6. MariaDB設定tls_version總是失敗

這是因為MariaDB舊版的設定是使用ssl_cipher,新版才有tls_version

ssl-ca=/etc/mysql/cacert.pem

ssl-cert=/etc/mysql/server-cert.pem

ssl-key=/etc/mysql/server-key.pem

ssl_cipher=TLSv1.2


留言