Làm cách nào để kết nối MySQL với SSL?

Trong hướng dẫn này, tôi sẽ chỉ cho bạn từng bước để định cấu hình MySQL một cách an toàn cho các kết nối từ xa. Khi bạn cần truy cập MySQL từ xa, bạn phải sử dụng VPN vì MySQL không mã hóa dữ liệu được truyền hoặc bạn có thể định cấu hình MySQL để sử dụng SSL, như tôi sẽ chỉ cho bạn trong hướng dẫn này. Trong cấu hình này, chỉ những người dùng có tệp chứng chỉ SSL chính xác mới được phép kết nối với máy chủ MySQL và lưu lượng truy cập được mã hóa. Chúng tôi sẽ cài đặt phiên bản MySQL mới nhất, sau đó định cấu hình SSL cho kết nối từ xa. Đối với hệ thống cơ sở, tôi sẽ sử dụng máy chủ CentOS 7

chúng ta sẽ làm gì

  1. Cài đặt MySQL
  2. Định cấu hình Mật khẩu gốc của MySQL
  3. Tạo tệp chứng chỉ SSL tự ký mới
  4. Kích hoạt SSL cho MySQL
  5. Kích hoạt kết nối từ xa
  6. thử nghiệm

Điều kiện tiên quyết

  • Máy chủ CentOS 7
  • Đặc quyền gốc

Bước 1 - Cài đặt MySQL

Trong hướng dẫn này, chúng tôi sẽ sử dụng MySQL 5. 7, phiên bản mới nhất tại thời điểm này. Nó được cài đặt từ kho lưu trữ MySQL, vì vậy trước tiên chúng tôi phải thêm kho lưu trữ CentOS mới vào hệ thống

Thêm kho lưu trữ mới cho MySQL bằng lệnh yum bên dưới

yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

Bạn sẽ được yêu cầu cài đặt gói mới, nhập 'y' và nhấn 'Enter' để xác nhận

Bây giờ bạn có thể cài đặt MySQL phiên bản 5 mới nhất. 7 đến máy chủ như thế này

yum -y install mysql-community-server

Khi quá trình cài đặt hoàn tất, hãy khởi động dịch vụ MySQL và cho phép nó chạy tự động khi khởi động bằng lệnh systemctl

systemctl start mysqld
systemctl enable mysqld

Đảm bảo MySQL đang chạy bằng cách kiểm tra cổng được sử dụng bởi MySQL (3306). Kiểm tra bằng lệnh netstat bên dưới

netstat -plntu

Installing MySQL 5.7 on CentOS 7

MySQL đã được cài đặt trên CentOS 7 từ kho lưu trữ MySQL

Bước 2 - Cấu hình MySQL Root Password

Theo mặc định, MySQL 5. 7 tạo mật khẩu gốc mặc định cho bạn khi bắt đầu dịch vụ lần đầu tiên. Mật khẩu được lưu trữ trong tệp nhật ký MySQL '/var/log/mysqld. nhật ký'

Để xem mật khẩu root MySQL mặc định, bạn có thể sử dụng lệnh grep bên dưới

grep 'temporary' /var/log/mysqld.log

Bạn sẽ thấy kết quả tương tự như bên dưới, mật khẩu mặc định của tôi là 'wxtX8Te&Uh1K'

A temporary password is generated for [email protected]: wxtX8Te&Uh1K

Kết nối với MySQL shell bằng mật khẩu mặc định và thay thế mật khẩu bằng mật khẩu của riêng bạn

mysql -u root -p
TYPE IN DEFAULT PASSWORD

Bây giờ thay thế mật khẩu mặc định bằng mật khẩu của riêng bạn. Trong hướng dẫn này, tôi sẽ sử dụng '[email được bảo vệ]' làm mật khẩu gốc MySQL mới. Chạy các truy vấn MySQL bên dưới

ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]';
flush privileges;
exit;

Configure MySQL root password on CentOS 7

Giờ đây, bạn có thể kết nối lại bằng mật khẩu mới '[email được bảo vệ]'

________số 8

Bước 3 - Tạo tệp chứng chỉ tự ký mới

Theo mặc định, MySQL 5. 7 có các tệp chứng chỉ SSL riêng trong thư mục '/var/lib/mysql'. Nhưng trong hướng dẫn này, tôi sẽ chỉ cho bạn cách tạo các tệp Chứng chỉ SSL của riêng bạn bằng OpenSSL, sau đó định cấu hình chúng bằng MySQL. Quảng cáo

Trong bước này, chúng tôi sẽ tạo các tệp chứng chỉ tự ký mới. Chúng tôi cần 3 chứng chỉ, Chứng chỉ CA, Chứng chỉ máy chủ và Khóa, Chứng chỉ ứng dụng khách và Khóa. Chúng tôi sẽ tạo chúng với OpenSSL

Tạo một thư mục mới cho các tệp chứng chỉ SSL '/etc/certs/' và chuyển đến thư mục đó

mkdir -p /etc/certs
cd /etc/certs

Tạo chứng chỉ CA mới ca. tập tin pem

yum -y install mysql-community-server
0

Generate CA Certificate for MySQL

Tiếp theo, chúng ta phải tạo chứng chỉ phía máy chủ. Tạo chứng chỉ máy chủ mới server-cert. pem và khóa máy chủ. tập tin pem. Tạo tệp chứng chỉ mới, xóa cụm mật khẩu và ký chúng bằng chứng chỉ CA

yum -y install mysql-community-server
1

Generate Server Certificate for MySQL

Bây giờ tạo tệp chứng chỉ cho khách hàng. Máy chủ MySQL sẽ chỉ chấp nhận kết nối từ xa từ máy khách có các tệp chứng chỉ này. Tạo tệp chứng chỉ ứng dụng khách mới, xóa cụm mật khẩu và ký chúng bằng chứng chỉ CA

yum -y install mysql-community-server
2

Generate Client Certificate for MySQL

Ghi chú

Thông tin chứng chỉ CA phải khác với thông tin máy khách và máy chủ

Tất cả các chứng chỉ mà chúng tôi yêu cầu cho thiết lập này đã được tạo. Bây giờ chúng ta có thể xác minh các tệp chứng chỉ bằng lệnh bên dưới

yum -y install mysql-community-server
3

Đảm bảo không bị lỗi, kết quả như bên dưới

Verify Certificate FIles for MySQL

Tất cả các tệp Chứng chỉ đã được xác minh. Thay đổi chủ sở hữu của thư mục certs thành người dùng 'mysql' và thay đổi quyền của tất cả các tệp chính

yum -y install mysql-community-server
4

Bước 4 - Kích hoạt SSL cho MySQL

Trong bước này, chúng tôi sẽ kích hoạt SSL cho MySQL. Trước khi bắt đầu cấu hình và kích hoạt SSL trên MySQL, chúng ta cần sao lưu các tệp chứng chỉ mặc định vào thư mục sao lưu mới

Tạo thư mục sao lưu mới 'mysql-certs' cho tất cả các chứng chỉ

yum -y install mysql-community-server
5

Chuyển đến thư mục '/var/lib/mysql' và di chuyển tất cả các chứng chỉ mặc định vào thư mục sao lưu

yum -y install mysql-community-server
6

Bây giờ khởi động lại dịch vụ MySQL

yum -y install mysql-community-server
7

Backup Default MySQL Certificates to New Backup Directory

Tiếp theo, kiểm tra SSL từ vỏ MySQL. Đăng nhập vào mysql bằng mật khẩu mới

________số 8

Chạy truy vấn bên dưới để chúng tôi có thể xem trạng thái SSL cho MySQL

yum -y install mysql-community-server
9

Bạn sẽ thấy trạng thái SSL là 'DISABLED' và người dùng root đã được kết nối mà không cần SSL

SSL on MySQL Disabled and Root User Connected without SSL

Tiếp theo, chúng tôi sẽ kích hoạt kết nối SSL cho MySQL. Chúng ta phải chỉnh sửa tệp cấu hình MySQL 'my. cnf' với vim

systemctl start mysqld
systemctl enable mysqld
0

Trong phần '[mysqld]', hãy dán cấu hình bên dưới

systemctl start mysqld
systemctl enable mysqld
1

Lưu tệp và thoát vim, khởi động lại dịch vụ MySQL

yum -y install mysql-community-server
7

Bây giờ hãy đăng nhập lại vào MySQL và kiểm tra SSL

________số 8

Chạy truy vấn bên dưới để đảm bảo giá trị phần SSL là 'CÓ'

systemctl start mysqld
systemctl enable mysqld
4

SSL for MySQL Enabled, but Root user still not connected without SSL

Bạn sẽ thấy rằng SSL cho MySQL đã được kích hoạt, nhưng người dùng root vẫn chưa được kết nối bằng kết nối SSL

Để buộc tất cả kết nối người dùng cục bộ bằng SSL, hãy chỉnh sửa tệp cấu hình mysql 'my. cnf' lần nữa

systemctl start mysqld
systemctl enable mysqld
0

Dán cấu hình bên dưới vào cuối dòng

systemctl start mysqld
systemctl enable mysqld
6

Lưu và thoát, sau đó khởi động lại MySQL

yum -y install mysql-community-server
7

Kết nối lại với MySQL và kiểm tra kết nối và kích hoạt SSL

systemctl start mysqld
systemctl enable mysqld
8

SSL is Enabled on MySQL and Root user connected with SSL

SSL đã được bật và kết nối cục bộ cũng sử dụng SSL

Bước 5 - Kích hoạt kết nối từ xa

Ở các bước trên, chúng ta đã kích hoạt SSL cho máy chủ MySQL và các kết nối cục bộ buộc phải sử dụng SSL. Trong bước này, chúng tôi sẽ kích hoạt các kết nối từ xa cho MySQL, nhưng chúng tôi chỉ cho phép các máy khách có tệp chứng chỉ được ký bởi CA của chúng tôi để kết nối với máy chủ MySQL

Chỉnh sửa tệp cấu hình MySQL bằng vim

systemctl start mysqld
systemctl enable mysqld
0

Dán cấu hình này bên dưới vào cuối phần '[mysqld]'

netstat -plntu
0

Lưu tệp và thoát trình chỉnh sửa, khởi động lại MySQL

yum -y install mysql-community-server
7

Tiếp theo, tạo người dùng mới cho kết nối từ xa. Tôi sẽ tạo một người dùng mới có tên 'hakase' với mật khẩu '[email được bảo vệ]' và cấp tất cả các đặc quyền cho người dùng 'hakase'. Người dùng 'hakase' sẽ chỉ có thể kết nối với khóa Chứng chỉ

netstat -plntu
2

Create New user for Remote Connection MySQL

Người dùng mới cho kết nối từ xa đã được tạo

Ghi chú

Bạn có thể thấy '1 cảnh báo' trong kết quả truy vấn mysql. Nó chỉ cảnh báo về việc sử dụng truy vấn ALTER USER thay vì GRANT vì truy vấn 'GRANT' sẽ không được dùng nữa trong bản phát hành tiếp theo

Bước 6 - Kiểm tra

Trong phần cuối cùng của hướng dẫn này, chúng tôi sẽ kiểm tra xem người dùng mới có tên 'hakase' có thể kết nối với máy chủ MySQL từ xa bằng các tệp chứng chỉ hay không. Ba chứng chỉ cho khách hàng phải được tải xuống

  1. chứng chỉ CA - ca. pem
  2. Chứng chỉ ứng dụng khách - client-cert. pem
  3. Khóa khách hàng - khóa khách hàng. pem

Tôi đã đăng nhập vào một hệ thống Linux khác và cài đặt các gói mysql-client ở đó. Sau đó, tôi đã tải xuống tất cả các tệp chứng chỉ ứng dụng khách bằng SCP. Bây giờ tôi sẽ kết nối với máy chủ MySQL bằng các tệp chứng chỉ

netstat -plntu
3

10. 0. 15. 11 = Địa chỉ IP của Máy chủ MySQL

Connect remotely to the MySQL Server CentOS 7

Bạn có thể xem trạng thái kết nối với truy vấn này bên dưới

netstat -plntu
4

Remote Connection with SSL on MySQL

Người dùng hakase với địa chỉ IP 10. 0. 15. 10 Đã kết nối với máy chủ MySQL bằng địa chỉ IP 10. 0. 15. 11, kết nối qua TCP/IP trên cổng 3306 và sử dụng SSL

Khi bạn cố gắng kết nối mà không có tệp Chứng chỉ, bạn sẽ thấy lỗi như bên dưới

Access denied remote connection without Client Certificate

Tiếp theo, tôi sẽ kiểm tra với MySQLWorkbench GUI từ máy chủ của tôi

Dưới đây là cấu hình của tôi - Cài đặt tham số

Configure Connection MySQLWorkbench

Cấu hình SSL - Cài đặt SSL

SSL Configuration for MySQLWOrkbench

Và bên dưới là kết quả kết nối với file SSL Client Certificate

MySQLWorkbench Connected with SSL

Người dùng mới đã kết nối thành công từ xa với máy chủ cơ sở dữ liệu MySQL bằng kết nối SSL. Khi người dùng cố gắng kết nối mà không có tệp Chứng chỉ, kết quả sẽ là 'từ chối'. Cài đặt và cấu hình MySQL với kết nối SSL đã thành công

MySQL có hỗ trợ SSL không?

MySQL cũng cung cấp các tùy chọn này để kiểm soát kết nối được mã hóa phía máy khách. --ssl-mã . Danh sách các mật mã được phép mã hóa kết nối.

SSL hoạt động như thế nào trong MySQL?

Sự hiện diện của tùy chọn --ssl rõ ràng hoặc từ đồng nghĩa ( --ssl=1 , --enable-ssl ) là bắt buộc. Máy khách yêu cầu kết nối được mã hóa và không thành công nếu không thể thiết lập . Với tùy chọn --ssl=0 hoặc từ đồng nghĩa ( --skip-ssl , --disable-ssl ), khách hàng sử dụng kết nối không được mã hóa.

Làm cách nào để kiểm tra kết nối SSL MySQL?

GIẢI PHÁP CHÍNH THỨC THEO TRANG WEB MYSQL . CHỌN * TỪ performance_schema. session_status WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher'); .

Làm cách nào để bật SSL trong cửa sổ MySQL?

Sử dụng \"Quản lý khóa cá nhân\" cho Chứng chỉ SSL. Tạo chứng chỉ tự ký. Ký chứng chỉ bởi cơ quan bên thứ ba. Sửa đổi Mục đích của Khóa trong Cổng. Sử dụng Khóa riêng trong Cổng
Sử dụng \"Quản lý chứng chỉ\" cho Chứng chỉ SSL. Kiểm tra xác thực/thu hồi chứng chỉ