Mysql
無法使用自簽名 SSL 證書連接到 mysql
創建自簽名 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