Mysql

無法使用自簽名 SSL 證書連接到 mysql

  • March 1, 2019

創建自簽名 SSL 證書後,我已將遠端 MySQL 伺服器配置為使用它們(並且啟用了 SSL)

我 ssh 進入我的遠端伺服器,並嘗試使用 SSL 連接到它自己的 mysqld(MySQL 伺服器是 5.5.25)..

mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password: 
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

好的,我記得讀過通過 SSL 連接到同一伺服器的一些問題。所以我將客戶端密鑰下載到我的本地盒子,然後從那裡測試……

mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert 
Enter password: 
ERROR 2026 (HY000): SSL connection error

不清楚這個“SSL 連接錯誤”錯誤指的是什麼,但如果我省略-ssl-ca,那麼我可以使用 SSL 進行連接。

mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)

但是,我相信這只是加密連接,並沒有真正驗證證書的有效性(這意味著我可能容易受到中間人攻擊)

SSL 證書是有效的(儘管是自簽名的),並且沒有密碼。所以我的問題是,我做錯了什麼?如何使用自簽名證書通過 SSL 連接?

MySQL Server 版本為 5.5.25,伺服器和客戶端為 CentOS 5。

感謝您的任何建議

編輯:請注意,在所有情況下,命令都是從 ssl 密鑰所在的同一目錄發出的(因此沒有絕對路徑)

編輯(回應mgorven): ca.cert是證書頒發機構證書,它應該告訴mysql我的證書頒發機構是受信任的。

配置my.cnf來自

[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key

我也嘗試添加ssl-cipher=DHE-RSA-AES256-SHA,但由於沒有幫助而將其刪除。

是的,您是正確的,如果您不指定,--ssl-ca那麼客戶端根本不會檢查伺服器證書。由於它在沒有該選項的情況下工作,因此失敗的最可能原因是客戶端不信任伺服器證書。

如果您使用的是自簽名客戶端和伺服器證書,則該ca.cert文件應包含這兩個文件。這樣,客戶端將信任伺服器證書,而伺服器將信任客戶端證書。

例如:

生成伺服器密鑰和證書:

$ openssl req -x509 -newkey rsa:1024 \
        -keyout server-key-enc.pem -out server-cert.pem \
        -subj '/DC=com/DC=example/CN=server' -passout pass:qwerty

$ openssl rsa -in server-key-enc.pem -out server-key.pem \
        -passin pass:qwerty -passout pass:

生成客戶端密鑰和證書:

$ openssl req -x509 -newkey rsa:1024 \
        -keyout client-key-enc.pem -out client-cert.pem \
        -subj '/DC=com/DC=example/CN=client' -passout pass:qwerty

$ openssl rsa -in client-key-enc.pem -out client-key.pem \
        -passin pass:qwerty -passout pass:

將客戶端和伺服器證書合併到 CA 證書文件中:

$ cat server-cert.pem client-cert.pem > ca.pem

引用自:https://serverfault.com/questions/399487