首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL SSL加密連接完整配置指南:從證書生成到強制加密實戰

     編輯:MySQL 資料庫相關知識

前置條件檢查清單

  • ✅ MySQL編譯支持OpenSSL(--with-vio --with-openssl)
  • ✅ 權限表含SSL列(MySQL 4.0.0+默認有,舊版執行mysql_fix_privilege_tables升級)
  • ✅ 驗證支持:SHOW VARIABLES LIKE 'have_openssl'; 返回YES

證書體系準備(三對關鍵文件)

文件用途獲取方式
CA證書 (ca-cert.pem) 信任錨點,驗證雙端證書 商業CA購買 或 自簽生成
服務器證書 (server-cert.pem) 服務端身份證明 CA簽發 或 自簽
服務器私鑰 (server-key.pem) 解密客戶端加密數據 配對生成,嚴格保護權限chmod 600
客戶端證書 (client-cert.pem) 客戶端身份證明(雙向認證時) 同CA簽發
客戶端私鑰 (client-key.pem) 客戶端解密服務端數據 配對生成

服務端配置(my.cnf [mysqld]段)

[mysqld]
ssl-ca=/usr/local/mysql/data/ca-cert.pem
ssl-cert=/usr/local/mysql/data/server-cert.pem
ssl-key=/usr/local/mysql/data/server-key.pem

重啟服務生效。驗證:SHOW VARIABLES LIKE 'have_ssl'; 應為YES。

客戶端配置三種方式

1. 選項文件 ~/.my.cnf(推薦持久化)

[mysql]
ssl-ca=/home/user/ca-cert.pem
ssl-cert=/home/user/client-cert.pem
ssl-key=/home/user/client-key.pem

2. 命令行顯式指定

mysql --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem

3. 連接器參數(JDBC/Python等)

# JDBC
jdbc:mysql://host:3306/db?useSSL=true&verifyServerCertificate=true&
    trustCertificateKeyStoreUrl=file:/path/keystore&
    trustCertificateKeyStorePassword=secret

# Python mysql-connector
cnx = mysql.connector.connect(ssl_ca='ca.pem', ssl_cert='cert.pem', ssl_key='key.pem')

驗證加密連接生效

mysql> \s
# 或
mysql> SHOW STATUS LIKE 'Ssl_cipher';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| Ssl_cipher    | TLS_AES_256_GCM_SHA384 |
+---------------+---------------------+

顯示加密套件即確認SSL握手成功。未加密連接顯示空值。

強制用戶使用SSL連接

GRANT ALL ON db.* TO 'secure_user'@'%' IDENTIFIED BY 'pwd' REQUIRE SSL;
# 或僅要求加密不驗證證書
GRANT ALL ON db.* TO 'ssl_user'@'%' IDENTIFIED BY 'pwd' REQUIRE X509;

性能與安全平衡建議

  • SSL握手增加首次連接延遲(~1-5ms),長連接池模式影響可忽略
  • CPU開銷:AES-NI硬件加速下<5%,無硬件加速約10-15%
  • 生產環境強制內網核心服務啟用SSL,外網訪問必須SSL
  • 定期輪換證書(建議年更),私鑰洩露立即吊鑰重發

自簽證書快速生成腳本(測試環境)

#!/bin/bash
openssl genrsa -out ca-key.pem 2048
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca-cert.pem -subj "/CN=MySQL-CA"
openssl req -newkey rsa:2048 -nodes -keyout server-key.pem -out server-req.pem -subj "/CN=mysql-server"
openssl x509 -req -in server-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
# 客戶端證書同理生成
chmod 600 *-key.pem
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved