Trong bài đăng trên blog này, chúng tôi xem xét một số khía cạnh quan trọng của việc định cấu hình và quản lý SSL trong lưu trữ MySQL. Chúng sẽ bao gồm cấu hình mặc định, tắt SSL, bật và thực thi SSL trên máy chủ MySQL. Các quan sát của chúng tôi dựa trên phiên bản cộng đồng của MySQL 5.7.21.
Cấu hình SSL mặc định trong MySQL
Theo mặc định, máy chủ MySQL luôn cài đặt và bật cấu hình SSL. Tuy nhiên, không bắt buộc các máy khách kết nối bằng SSL. Khách hàng có thể chọn kết nối có hoặc không có SSL vì máy chủ cho phép cả hai loại kết nối. Hãy xem cách xác minh hành vi mặc định này của máy chủ MySQL.
Khi SSL được cài đặt và bật trên máy chủ MySQL theo mặc định, chúng ta thường sẽ thấy những điều sau:
- Sự hiện diện của tệp * .pem trong thư mục dữ liệu MySQL. Đây là các chứng chỉ và khóa máy khách và máy chủ khác nhau được sử dụng cho SSL như được mô tả ở đây.
- Sẽ có ghi chú trong tệp nhật ký lỗi mysqld trong quá trình khởi động máy chủ, chẳng hạn như:
- [Lưu ý] Đã tìm thấy ca.pem, server-cert.pem và server-key.pem trong thư mục dữ liệu. Đang cố gắng bật hỗ trợ SSL bằng cách sử dụng chúng.
- Giá trị của biến ‘have_ssl’ sẽ là CÓ:
mysql> hiển thị các biến như ‘have_ssl’;
+ ————— + ——- +
| Tên_biến | Giá trị |
+ ————— + ——- +
| has_ssl | CÓ |
+ ————— + ——- +
Đối với máy khách MySQL, theo mặc định, nó luôn cố gắng kết nối mạng được mã hóa với máy chủ và nếu không thành công, nó sẽ quay trở lại chế độ không được mã hóa.
Vì vậy, bằng cách kết nối với máy chủ MySQL bằng lệnh:
mysql -h
Chúng tôi có thể kiểm tra xem kết nối máy khách hiện tại có được mã hóa hay không bằng cách sử dụng lệnh trạng thái:
mysql> status
————–
mysql Ver 14.14 Distrib 5.7.21, dành cho Linux (x86_64) sử dụng trình bao bọc EditLine
Id kết nối:75
Cơ sở dữ liệu hiện tại:
Người dùng hiện tại:[email protected]
SSL:Mật mã đang được sử dụng là DHE-RSA-AES256-SHA
Máy nhắn tin hiện tại:stdout
Sử dụng outfile:”
Sử dụng dấu phân cách:;
Phiên bản máy chủ:5.7.21-log Máy chủ cộng đồng MySQL (GPL)
Phiên bản giao thức:10
Kết nối:127.0.0.1 qua TCP / IP
………………………… ..
Trường SSL được đánh dấu ở trên cho biết rằng kết nối đã được mã hóa. Tuy nhiên, chúng tôi có thể yêu cầu máy khách MySQL kết nối không có SSL bằng cách sử dụng lệnh:
mysql -h
mysql> status
————–
Id kết nối:93
Cơ sở dữ liệu hiện tại:
Người dùng hiện tại:[email protected]
SSL:Không được sử dụng
Máy nhắn tin hiện tại:stdout
Sử dụng outfile:”
Sử dụng dấu phân cách:;
Phiên bản máy chủ:5.7.21-log Máy chủ cộng đồng MySQL (GPL)
Phiên bản giao thức:10
Kết nối:127.0.0.1 qua TCP / IP
……………………………
Chúng tôi có thể thấy rằng mặc dù SSL được bật trên máy chủ, chúng tôi vẫn có thể kết nối với nó mà không cần SSL.
Hướng dẫn sử dụng MySQL - Cách định cấu hình và quản lý SSL trên máy chủ #MySQL của bạnNhấp vào Tweet
Tắt SSL trong MySQL
Nếu yêu cầu của bạn là tắt hoàn toàn SSL trên máy chủ MySQL thay vì tùy chọn mặc định là 'đã bật, nhưng chế độ tùy chọn', chúng tôi có thể làm như sau:
- Xóa chứng chỉ * .pem và các tệp khóa trong thư mục dữ liệu MySQL.
- Khởi động MySQL với tùy chọn SSL bị tắt. Điều này có thể được thực hiện bằng cách thêm một mục nhập dòng:
ssl =0 trong tệp my.cnf.
Chúng ta có thể nhận thấy rằng:
- Sẽ KHÔNG có bất kỳ ghi chú nào trong nhật ký mysqld như:
- [Lưu ý] Đã tìm thấy ca.pem, server-cert.pem và server-key.pem trong thư mục dữ liệu. Đang cố gắng bật hỗ trợ SSL bằng cách sử dụng chúng.
- Giá trị của biến ‘have_ssl’ sẽ bị HÓA:
mysql> hiển thị các biến như ‘have_ssl’;
+ ————— + ——- +
| Tên_biến | Giá trị |
+ ————— + ——- +
| has_ssl | ĐÃ BỎ QUA |
+ ————— + ——- +
Thực thi SSL trong MySQL
Chúng tôi thấy rằng mặc dù SSL được bật theo mặc định trên máy chủ MySQL nhưng nó không được thực thi và chúng tôi vẫn có thể kết nối mà không cần SSL.
Bây giờ, bằng cách đặt biến hệ thống request_secure_transport, chúng tôi có thể thực thi rằng máy chủ sẽ chỉ chấp nhận các kết nối SSL. Điều này có thể được xác minh bằng cách cố gắng kết nối với máy chủ MySQL bằng lệnh:
mysql -h
Và, chúng ta có thể thấy rằng kết nối sẽ bị từ chối với thông báo lỗi sau từ máy chủ:
ERROR 3159 (HY000):Các kết nối sử dụng phương tiện truyền tải không an toàn bị cấm trong khi –require_secure_transport =ON.
SSL Cân nhắc cho Kênh Nhân rộng
Theo mặc định, trong thiết lập sao chép MySQL, các nô lệ kết nối với thiết bị chính mà không cần mã hóa.
Do đó, để kết nối với chủ một cách an toàn cho lưu lượng sao chép, nô lệ phải sử dụng MASTER_SSL =1; như một phần của ‘ CHANGE MASTER TO’ lệnh chỉ định các tham số để kết nối với cái chính. Xin lưu ý rằng tùy chọn này cũng là bắt buộc trong trường hợp chính của bạn được định cấu hình để thực thi kết nối SSL bằng cách sử dụng request_secure_transport.