為了保障資料傳輸安全,MySQL 支援 SSL/TLS 加密連線。本文透過實際操作範例,詳細說明如何在 MySQL 伺服器與客戶端啟用 SSL,包含憑證配置、參數設定與連線測試。
在選項檔 my.cnf 中分別設定客戶端與伺服器端的 SSL 參數:
[client]
ssl-ca=$DIR/cacert.pem
ssl-cert=$DIR/client-cert.pem
ssl-key=$DIR/client-key.pem
[mysqld]
ssl-ca=$DIR/cacert.pem
ssl-cert=$DIR/server-cert.pem
ssl-key=$DIR/server-key.pem
說明:$DIR為my.cnf檔案所在路徑。請確保憑證檔案權限正確,私鑰僅限擁有者讀取。
shell> mysqld --defaults-file=$DIR/my.cnf &
shell> mysql --defaults-file=$DIR/my.cnf
[root@localhost mysql-5.0.20a]# chown -R root /usr/local/mysql
[root@localhost mysql-5.0.20a]# chown -R mysql /usr/local/mysql/var
[root@localhost mysql-5.0.20a]# chgrp -R mysql /usr/local/mysql
[root@localhost mysql-5.0.20a]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
[root@localhost mysql]# ./bin/mysql -u root --socket=/tmp/mysql.sock
將 mysql/share/mysql/mysql.server 複製到 /etc/init.d/ 並命名為 mysql:
chmod 775 /etc/init.d/mysql
chkconfig --add mysql
mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON mydb2.* TO 'd_admin'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON mydb2.* TO 'bodd'@'192.168.18.14' IDENTIFIED BY 'domainssl' REQUIRE SSL;
mysql> FLUSH PRIVILEGES;
重點: 最後一行 REQUIRE SSL 強制該帳號必須走加密連線。
連線成功後,執行 SHOW STATUS LIKE 'Ssl_cipher'; 若回傳加密套件名稱(如 DHE-RSA-AES256-SHA),即確認已啟用 SSL。