MySQL/Encrypted Connection
< MySQL
客戶端可以與MySQL服務器加密連接,也可以非加密連接。這是採用了SSL(Secure Socket Layer:安全套接字層),利用數據加密、身份驗證和消息完整性驗證機制,為基於TCP等可靠連接的應用層協議提供安全性保證。
服務器Data目錄下的SSL相關文件
編輯- ca-key.pem #CA私鑰
- ca.pem #自簽的CA證書,客戶端連接也需要提供
- client-cert.pem #客戶端連接服務器端需要提供的證書文件(因為安裝一套服務器的bin目錄總是帶着一套client工具)
- client-key.pem #客戶端連接服務器端需要提供的私鑰文件
- private_key.pem #私鑰/公鑰對的私有成員
- public_key.pem #私鑰/公鑰對的共有成員
- server-cert.pem #服務器端證書公鑰文件
- server-key.pem #服務器端證書私鑰文件
在服務器中查看是否開啟了SSL連接
編輯root登錄後:
mysql>show global variables like '%ssl%';
查看用戶是否用SSL連接
編輯mysql>\s ... SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256 ...
強制指定用戶必須使用SSL連接數據庫
編輯#修改已存在用户 ALTER USER 'dba'@'%' REQUIRE SSL; #新建必须使用SSL用户 grant select on *.* to UserName@'%' identified by 'xxx' REQUIRE SSL;
服務器啟動時的相關參數
編輯啟動時關閉SSL:
mysqld --console --skip-ssl
或使用配置文件,即在 my.cnf 文件中添加如下內容: [mysqld]
實際上,如果服務器軟件在默認的data文件夾發現了有效的certificate與key 文件ca.pem、server-cert.pem、server-key.pem,就會支持客戶端加密連接,否則就不支持客戶端加密連接。
客戶端登錄時的SSL參數
編輯對於非強制SSL連接的數據庫用戶,登錄時會先嘗試SSL,失敗後再嘗試非加密連接。
客戶端關閉SSL的登陸: mysql -h localhost -u root -p --ssl-mode=DISABLED
客戶端開啟SSL登陸,需要拷貝 ca-cert.pem到本地。執行:
mysql -uroot -hlocalhost -pzdh1234 --ssl-ca=/home/mysql/sslconfig/ca.pem
或使用配置文件,即在 my.cnf 文件中添加如下內容:
[client] ssl-ca=/home/mysql/sslconfig/ca.pem