Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cấu hình SSL cho MySQL Server và Client trên Linux


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.