MySQL/Encrypted Connection

維基教科書,自由的教學讀本

客戶端可以與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