TLS còn gọi SSL (Secure Sockets Layer) – Transport Layer Security.
Kết nối không mã hóa giữa client và server MySQL cho phép kẻ có quyền truy cập mạng xem toàn bộ traffic, kiểm tra dữ liệu gửi/nhận. Khi cần truyền thông tin an toàn qua mạng, kết nối không mã hóa không chấp nhận được.
Để làm dữ liệu không đọc được, phải dùng mã hóa. Thuật toán mã hóa thường chứa yếu tố bảo mật chống nhiều tấn công đã biết (thay đổi thứ tự tin nhắn mã hóa, phát lại dữ liệu hai lần...). MySQL hỗ trợ kết nối mã hóa giữa client và server dùng TLS. MySQL không dùng SSL protocol cho kết nối mã hóa vì mã hóa yếu.
TLS dùng thuật toán mã hóa đảm bảo dữ liệu nhận qua mạng công cộng là dữ liệu tin cậy. Có cơ chế phát hiện thay đổi, mất mát, phát lại dữ liệu. TLS cũng dùng thuật toán xác thực danh tính theo chuẩn X.509.
Các bước bật TLS
MySQL mã hóa trên cơ sở mỗi kết nối. Mã hóa cho user có thể tùy chọn hoặc bắt buộc, cho phép ứng dụng chọn kết nối mã hóa hoặc không.
- Chỉ định tham số
ssl-certvàssl-keytrong file cấu hình khi khởi động server. - Chứng chỉ/khóa được ký và tạo bằng OpenSSL.
- Có thể tạo khóa bằng công cụ
mysql_ssl_rsa_setupcủa MySQL:mysql_ssl_rsa_setup --datadir=./certs
- Nếu tham số đúng, kết nối an toàn được bật khi server khởi động.
- Nạp lại chứng chỉ, khóa, CA: thực thi câu lệnh
ALTER INSTANCE RELOAD TLStrên instance server. Đảm bảo không phải khởi động lại server. - Chứng chỉ, khóa, CA mới có hiệu lực sau khi kết nối đã thiết lập thành công thực thi.
- Cấu hình client MySQL dùng kết nối mã hóa: Mặc định client thử thiết lập kết nối mã hóa. Nếu server không hỗ trợ, tự động fallback kết nối không mã hóa.
- Thay đổi hành vi kết nối client bằng tham số
--ssl-mode:--ssl-mode=REQUIRED # Yêu cầu kết nối mã hóa
Bật xác thực: Nếu tham số ssl-ca không chỉ định, client/server không xác thực mặc định.
- Chỉ định
ssl-cert,ssl-keytrên server. - Chỉ định
--ssl-catrên client MySQL. - Chỉ định
--ssl-mode=VERIFY_CAtrên client. - Chứng chỉ server (
ssl-cert) phải được ký bởi CA mà client chỉ định qua--ssl-ca. Nếu không, xác thực thất bại.
Để xác thực client từ server:
- Chỉ định
ssl-cert,ssl-key,ssl-catrên server. - Chỉ định
--ssl-cert,--ssl-keytrên client. - Chứng chỉ server và client đều được ký bởi
ssl-cacủa server. - Xác thực server-to-client là tùy chọn. Nếu client không trình chứng chỉ khi handshake TLS, kết nối TLS vẫn được thiết lập.
- Kiểm tra kết nối hiện tại có dùng mã hóa không.