Hướng dẫn thiết lập kết nối an toàn MySQL dùng SSL/TLS để mã hóa dữ liệu, chống nghe lén và giả mạo.
Kích hoạt hỗ trợ SSL
Kiểm tra trạng thái SSL:
mysql> show variables like '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_key | | +---------------+----------+
Tạo chứng chỉ SSL cho MySQL
Tạo thư mục chứa cert:
# mkdir /etc/certificates # cd /etc/certificates
Tạo chứng chỉ Server
# openssl genrsa 2048 > ca-key.pem # openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem # openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
Tạo chứng chỉ Client
# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem # openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
Cấu hình my.cnf phía server:
[mysqld] ssl-ca=/etc/certificates/ca-cert.pem ssl-cert=/etc/certificates/server-cert.pem ssl-key=/etc/certificates/server-key.pem
Khởi động lại MySQL và kiểm tra
# service mysqld restart mysql> show variables like '%ssl%'; +---------------+-----------------------------------+ | Variable_name | Value | +---------------+-----------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/certificates/ca-cert.pem | | ssl_capath | | | ssl_cert | /etc/certificates/server-cert.pem | | ssl_cipher | | | ssl_key | /etc/certificates/server-key.pem | +---------------+-----------------------------------+
Tạo user yêu cầu SSL
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ssl_user'@'%' IDENTIFIED BY 'password' REQUIRE SSL; mysql> FLUSH PRIVILEGES;
Cấu hình SSL cho MySQL Client
Copy client cert/key từ server sang client machine:
# scp /etc/certificates/client-cert.pem root@client:/etc/certificates # scp /etc/certificates/client-key.pem root@client:/etc/certificates # scp /etc/certificates/client-req.pem root@client:/etc/certificates
Kết nối từ client với SSL:
# mysql --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -h server_ip -u ssluser -p
Kiểm tra trạng thái SSL trong phiên làm việc:
mysql> status ... SSL: Cipher in use is DHE-RSA-AES256-SHA ...
Cấu hình vĩnh viễn trong /etc/my.cnf phía client:
[client] ssl-ca=/etc/certificates/ca-cert.pem ssl-cert=/etc/certificates/client-cert.pem ssl-key=/etc/certificates/client-key.pem
Sau cấu hình, mọi kết nối từ client sẽ tự động dùng SSL, bảo vệ dữ liệu khỏi tấn công.