18/09/2018, 16:26

Làm thế nào để cấu hình SSL / TLS cho MySQL trên Ubuntu 16.04

Giới thiệu MySQL là hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở phổ biến nhất trên thế giới. Các nhà quản lý gói hiện đại đã giảm một số ma sát để có được MySQL và chạy, nhưng vẫn còn một số cấu hình cần được thực hiện sau khi cài đặt. Một trong những lĩnh vực quan trọng nhất để dành thời ...

Giới thiệu

MySQL là hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở phổ biến nhất trên thế giới. Các nhà quản lý gói hiện đại đã giảm một số ma sát để có được MySQL và chạy, nhưng vẫn còn một số cấu hình cần được thực hiện sau khi cài đặt. Một trong những lĩnh vực quan trọng nhất để dành thời gian thêm vào là an ninh.

Theo mặc định, MySQL được cấu hình để chỉ chấp nhận các kết nối cục bộ. Nếu bạn cần cho phép kết nối từ xa, điều quan trọng là phải làm như vậy một cách an toàn. Trong hướng dẫn này, chúng tôi sẽ trình bày cách cấu hình MySQL trên Ubuntu 16.04 để chấp nhận các kết nối từ xa với mã hóa SSL / TLS.

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

Để làm theo hướng dẫn này, bạn sẽ cần hai Ubuntu 16.04 máy chủ. Chúng tôi sẽ sử dụng một máy chủ MySQL và máy khách khác làm máy khách. Tạo người dùng không phải root với sudo đặc quyền trên mỗi máy chủ này. Theo dõi Hướng dẫn cài đặt máy chủ ban đầu cho Ubuntu 16.04 để đưa máy chủ của bạn vào trạng thái ban đầu thích hợp.

Trên máy đầu tiên, bạn nên có Máy chủ MySQL đã cài đặt và định cấu hình. Theo dõi Hướng dẫn cài đặt MySQL cho Ubuntu 16.04 để cài đặt và cấu hình phần mềm.

Trên máy thứ hai, hãy cài đặt Ứng dụng khách MySQL gói. Bạn có thể cập nhật apt gói chỉ mục và cài đặt phần mềm cần thiết bằng cách gõ:

sudo apt-get update

sudo apt-get install mysql-client

Khi máy chủ và máy khách của bạn đã sẵn sàng, hãy tiếp tục bên dưới.

Kiểm tra trạng thái SSL / TLS hiện tại

Trước khi chúng tôi bắt đầu, chúng tôi có thể kiểm tra trạng thái hiện tại của SSL / TLS trên Máy chủ MySQL ví dụ.

Đăng nhập vào một phiên MySQL bằng cách sử dụng root Người dùng MySQL. Chúng tôi sẽ sử dụng -h để xác định giao diện vòng lặp cục bộ IPv4 để buộc máy khách kết nối với TCP thay vì sử dụng tệp socket cục bộ. Điều này sẽ cho phép chúng tôi kiểm tra trạng thái SSL cho các kết nối TCP:

mysql -u root -p -h 127.0.0.1

Bạn sẽ được nhắc nhở về MySQL root mật khẩu mà bạn đã chọn trong quá trình cài đặt. Sau đó, bạn sẽ bị rơi vào một phiên MySQL tương tác.

Hiển thị trạng thái của biến SSL / TLS bằng cách nhập:

SHOW VARIABLES LIKE '%ssl%';

Output+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_crl       |          |
| ssl_crlpath   |          |
| ssl_key       |          |
+---------------+----------+
9 rows in set (0.01 sec)

Các have_openssl và have_ssl các biến được đánh dấu là DISABLED. Điều này có nghĩa là chức năng SSL đã được biên dịch vào máy chủ, nhưng nó chưa được kích hoạt.

Kiểm tra trạng thái kết nối hiện tại của chúng tôi để xác nhận:

s

Output--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

Connection id:      30
Current database:   
Current user:       root@localhost
SSL:         Not in use
Current pager:      stdout
Using outfile:      '
Using delimiter:    ;
Server version:     5.7.17-0ubuntu0.16.04.1 (Ubuntu)
Protocol version:   10
Connection:      127.0.0.1 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:       3306
Uptime:         3 hours 38 min 44 sec

Threads: 1  Questions: 70  Slow queries: 0  Opens: 121  Flush tables: 1  Open tables: 40  Queries per second avg: 0.005
--------------

Như đầu ra ở trên cho thấy, SSL hiện không được sử dụng cho kết nối của chúng tôi, mặc dù chúng tôi được kết nối qua TCP.

Đóng phiên MySQL hiện tại khi bạn kết thúc:

exit

Bây giờ chúng ta có thể bắt đầu cấu hình MySQL cho SSL để bảo đảm các kết nối của chúng ta.

Tạo các khóa và chứng chỉ SSL / TLS

Để kích hoạt các kết nối SSL tới MySQL, trước tiên chúng ta cần phải tạo ra các chứng chỉ và các tệp khóa thích hợp. Một tiện ích gọi là mysql_ssl_rsa_setup được cung cấp với MySQL 5.7 trở lên để đơn giản hóa quá trình này. Ubuntu 16.04 có một phiên bản tương thích của MySQL, vì vậy chúng ta có thể sử dụng lệnh này để tạo ra các tệp cần thiết.

Các tệp sẽ được tạo trong thư mục dữ liệu của MySQL, được đặt tại /var/lib/mysql. Chúng tôi cần quá trình MySQL để có thể đọc các tệp được tạo, vì vậy chúng tôi sẽ vượt qua mysql là người dùng nên sở hữu các tệp được tạo:

sudo mysql_ssl_rsa_setup --uid=mysql

Thế hệ sẽ tạo ra đầu ra trông giống như thế này:

OutputGenerating a 2048 bit RSA private key
...................................+++
.....+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key
......+++
.................................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key
......................................................+++
.................................................................................+++
writing new private key to 'client-key.pem'
-----

Kiểm tra các tệp đã tạo bằng cách nhập:

sudo find /var/lib/mysql -name '*.pem' -ls

Output   256740      4 -rw-r--r--   1 mysql    mysql        1078 Mar 17 17:24 /var/lib/mysql/server-cert.pem
   256735      4 -rw-------   1 mysql    mysql        1675 Mar 17 17:24 /var/lib/mysqlsql/ca-key.pem<^>
   256739      4 -rw-r--r--   1 mysql    mysql         451 Mar 17 17:24 /var/lib/mysqlsql/public_key.pem<^>
   256741      4 -rw-------   1 mysql    mysql        1679 Mar 17 17:24 /var/lib/mysqlsql/client-key.pem<^>
   256737      4 -rw-r--r--   1 mysql    mysql        1074 Mar 17 17:24 /var/lib/mysqlsql/ca.pem<^>
   256743      4 -rw-r--r--   1 mysql    mysql        1078 Mar 17 17:24 /var/lib/mysqlsql/client-cert.pem<^>
   256736      4 -rw-------   1 mysql    mysql        1675 Mar 17 17:24 /var/lib/mysqlsql/private_key.pem<^>
   256738      4 -rw-------   1 mysql    mysql        1675 Mar 17 17:24 /var/lib/mysqlsql/server-key.pem<^>

Cột cuối cùng hiển thị tên tệp được tạo. Các cột trung tâm hiển thị "mysql" chỉ ra rằng các tệp được tạo có quyền sở hữu và quyền sở hữu nhóm chính xác.

Các tệp này là cặp khóa và chứng chỉ cho cơ quan cấp chứng chỉ (bắt đầu bằng "ca"), quy trình máy chủ MySQL (bắt đầu bằng "máy chủ") và cho các máy khách MySQL (bắt đầu bằng "khách hàng"). Ngoài ra, private_key.pem và public_key.pem các tệp được MySQL sử dụng để chuyển mật khẩu an toàn khi không sử dụng SSL.

Bật kết nối SSL trên máy chủ MySQL

Các phiên bản MySQL hiện đại sẽ tìm kiếm các tệp chứng chỉ thích hợp trong thư mục dữ liệu MySQL khi máy chủ khởi động. Bởi vì điều này, chúng tôi không thực sự cần phải sửa đổi cấu hình MySQL để kích hoạt SSL.

Chúng tôi chỉ có thể khởi động lại dịch vụ MySQL thay vào đó:

sudo systemctl restart mysql

Sau khi khởi động lại, hãy mở một phiên MySQL mới bằng cách sử dụng lệnh tương tự như trước đây. Máy khách MySQL sẽ tự động tìm cách kết nối bằng SSL nếu máy chủ hỗ trợ:

mysql -u root -p -h 127.0.0.1

Chúng ta hãy cùng xem thông tin mà chúng tôi đã yêu cầu lần trước. Kiểm tra các giá trị của các biến liên quan đến SSL:

SHOW VARIABLES LIKE '%ssl%';

Output+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+
9 rows in set (0.00 sec)

Các have_openssl và have_ssl các biến đọc "CÓ" thay vì "ĐÃ TẮT" lần này. Hơn nữa, ssl_ca, ssl_certvà ssl_key các biến đã được điền bằng tên của các chứng chỉ có liên quan mà chúng tôi đã tạo.

Tiếp theo, kiểm tra lại chi tiết kết nối:

s

Output--------------
. . .
SSL:            Cipher in use is DHE-RSA-AES256-SHA
. . .
Connection:      127.0.0.1 via TCP/IP
. . .
--------------

Lần này, mật mã SSL cụ thể được hiển thị, cho biết SSL đang được sử dụng để bảo mật kết nối của chúng tôi.

Thoát ra ngoài vỏ:

exit

Máy chủ của chúng tôi hiện có khả năng sử dụng mã hóa, nhưng một số cấu hình bổ sung là bắt buộc để cho phép truy cập từ xa và ủy quyền sử dụng các kết nối an toàn.

Định cấu hình kết nối an toàn cho ứng dụng khách từ xa

Bây giờ chúng ta đã có SSL trên máy chủ, chúng ta có thể bắt đầu cấu hình truy cập từ xa an toàn. Để làm điều này, chúng ta cần:

  • Yêu cầu SSL cho kết nối từ xa
  • Liên kết với giao diện công khai
  • Tạo người dùng MySQL cho các kết nối từ xa
  • Điều chỉnh quy tắc tường lửa của chúng tôi để cho phép kết nối bên ngoài

Định cấu hình quyền truy cập từ xa với SSL bắt buộc

Hiện tại, máy chủ MySQL được cấu hình để chấp nhận các kết nối SSL từ các máy khách. Tuy nhiên, nó vẫn sẽ cho phép các kết nối không được mã hóa nếu khách hàng yêu cầu.

Chúng tôi có thể khắc phục điều này bằng cách bật require_secure_transport Tùy chọn. Điều này đòi hỏi tất cả các kết nối phải được thực hiện với SSL hoặc với một ổ cắm Unix cục bộ. Vì các ổ cắm Unix chỉ có thể truy cập từ bên trong máy chủ, nên tùy chọn kết nối duy nhất mở cho người dùng từ xa sẽ là với SSL.

Để bật cài đặt này, hãy mở /etc/mysql/my.cnf tệp trong trình chỉnh sửa văn bản của bạn:

sudo nano /etc/mysql/my.cnf

Bên trong, sẽ có hai !includedir các chỉ thị được sử dụng để bổ sung các tệp cấu hình bổ sung. Chúng tôi sẽ cần phải đặt cấu hình của riêng mình ở trên những dòng này để chúng ghi đè bất kỳ cài đặt xung đột nào.

Bắt đầu bằng cách tạo [mysqld] để nhắm mục tiêu quy trình máy chủ MySQL. Trong tiêu đề phần đó, đặt require_secure_transport đến ON:

/etc/mysql/my.cnf

. . .

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
# Require clients to connect either using SSL
# or through a local socket file
require_secure_transport = ON

Dòng đó là cài đặt duy nhất cần thiết để thực thi các kết nối an toàn.

Theo mặc định, MySQL được cấu hình để chỉ lắng nghe các kết nối có nguồn gốc trên máy tính cục bộ. Để cấu hình nó để nghe các kết nối từ xa, chúng ta có thể thiết lập bind-address sang một giao diện khác.

Để cho phép MySQL chấp nhận các kết nối trên bất kỳ giao diện nào của nó, chúng ta có thể thiết lập bind-address tới "0.0.0.0":

/etc/mysql/my.cnf

. . .

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
# Require clients to connect either using SSL
# or through a local socket file
require_secure_transport = ON
bind-address = 0.0.0.0

Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, khởi động lại MySQL để áp dụng các thiết lập mới:

sudo systemctl restart mysql

Xác minh rằng MySQL đang nghe "0.0.0.0" thay vì "127.0.0.1" bằng cách nhập:

sudo netstat -plunt

OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      4330/mysqld     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1874/sshd       
tcp6       0      0 :::22                   :::*                    LISTEN      1874/sshd

"0.0.0.0" trong đầu ra ở trên chỉ ra rằng MySQL đang lắng nghe các kết nối trên tất cả các giao diện có sẵn.

Tiếp theo, chúng ta cần cho phép các kết nối MySQL thông qua tường lửa của chúng ta. Tạo ngoại lệ bằng cách nhập:

sudo ufw allow mysql

OutputRule added
Rule added (v6)

Các nỗ lực kết nối từ xa giờ đây sẽ có thể tiếp cận với máy chủ MySQL của chúng tôi.

Cấu hình người dùng MySQL từ xa

Máy chủ MySQL hiện đang lắng nghe các kết nối từ xa nhưng hiện tại chúng tôi không có bất kỳ người dùng nào được định cấu hình có thể kết nối từ máy tính bên ngoài.

Đăng nhập vào MySQL dưới dạng root người dùng để bắt đầu:

mysql -u root -p

Bên trong, bạn có thể tạo người dùng từ xa mới bằng cách sử dụng CREATE USER chỉ huy. Chúng tôi sẽ sử dụng địa chỉ IP của máy khách của chúng tôi trong phần lưu trữ của đặc tả người dùng để hạn chế các kết nối đến máy đó.

Đối với một số dự phòng trong trường hợp require_secure_transport tùy chọn bị tắt trong tương lai, chúng tôi cũng sẽ chỉ định trong quá trình tạo tài khoản mà người dùng này yêu cầu SSL bằng cách bao gồm REQUIRE SSL mệnh đề:

CREATE USER 'remote_user'@'mysql_client_IP' IDENTIFIED BY 'password' REQUIRE SSL;

Tiếp theo, cấp quyền người dùng mới trên cơ sở dữ liệu hoặc bảng mà họ có quyền truy cập. Để chứng minh, chúng tôi sẽ tạo example cơ sở dữ liệu và cung cấp quyền sở hữu người dùng mới của chúng tôi:

CREATE DATABASE example;

GRANT ALL ON example.* TO 'remote_user'@'mysql_client_IP';

Tiếp theo, xóa các đặc quyền để áp dụng các cài đặt đó ngay lập tức:

FLUSH PRIVILEGES;

Thoát ra khỏi trình bao khi bạn làm xong:

exit

Máy chủ của chúng tôi được thiết lập để cho phép kết nối với người dùng từ xa của chúng tôi.

Kiểm tra kết nối từ xa

Trên Ứng dụng khách MySQL máy, kiểm tra để đảm bảo bạn có thể kết nối với máy chủ thành công. Sử dụng -u tùy chọn để chỉ định người dùng từ xa và -h tùy chọn để chỉ định địa chỉ IP của máy chủ MySQL:

mysql -u remote_user -p -h mysql_server_IP

Sau khi chỉ định mật khẩu, bạn sẽ đăng nhập vào máy chủ từ xa.

Kiểm tra để đảm bảo rằng kết nối của bạn được bảo mật:

s

Output--------------
. . .
SSL:         Cipher in use is DHE-RSA-AES256-SHA
. . .
Connection:      mysql_server_IP via TCP/IP
. . .
--------------

Thoát ra ngoài vỏ:

exit

Tiếp theo, cố gắng kết nối không an toàn:

mysql -u remote_user -p -h mysql_server_IP --ssl-mode=disabled

Sau khi được nhắc nhập mật khẩu của bạn, kết nối của bạn sẽ bị từ chối:

OutputERROR 1045 (28000): Access denied for user 'remote_user'@'mysql_server_IP' (using password: YES)

Đây là những gì chúng tôi đang hướng tới. Nó cho thấy rằng các kết nối SSL được cho phép, trong khi các kết nối không được mã hóa bị từ chối.

Tại thời điểm này, máy chủ MySQL của chúng tôi đã được cấu hình để chấp nhận các kết nối từ xa một cách an toàn. Bạn có thể dừng lại ở đây nếu điều này đáp ứng các yêu cầu bảo mật của bạn, nhưng có một số phần bổ sung mà chúng tôi có thể đưa vào để tăng cường an ninh và tin tưởng hơn nữa.

Định cấu hình Xác thực cho Kết nối MySQL (Tùy chọn)

Hiện tại, máy chủ MySQL của chúng tôi được cấu hình với chứng chỉ SSL được ký bởi một tổ chức phát hành chứng chỉ được tạo cục bộ (CA). Chứng chỉ của máy chủ và cặp khóa đủ để cung cấp mã hóa cho các kết nối đến.

Tuy nhiên, chúng tôi hiện không tận dụng mối quan hệ tin cậy mà cơ quan cấp chứng chỉ có thể cung cấp. Bằng cách phân phối chứng chỉ CA cho các máy khách, cũng như chứng chỉ ứng dụng khách và khóa, cả hai bên có thể cung cấp bằng chứng chứng chỉ của họ được ký bởi một tổ chức cấp chứng chỉ tin cậy lẫn nhau. Điều này có thể giúp ngăn chặn các kết nối giả mạo đến các máy chủ độc hại.

Để thực hiện việc bảo vệ bổ sung, tùy chọn này, chúng tôi sẽ cần phải:

  • Chuyển các tệp SSL thích hợp sang máy khách
  • Tạo tệp cấu hình ứng dụng khách
  • Thay đổi người dùng từ xa của chúng tôi để yêu cầu chứng chỉ đáng tin cậy

Chuyển chứng chỉ ứng dụng khách sang máy khách

Để bắt đầu, chúng ta cần lấy các tệp chứng chỉ ứng dụng khách và CA của MySQL từ máy chủ MySQL và đặt chúng trên máy khách MySQL.

Bắt đầu bằng cách tạo một thư mục trên Ứng dụng khách MySQL trong thư mục chính của người dùng bạn sẽ sử dụng để kết nối. Gọi đây client-ssl:

mkdir ~/client-ssl

Vì khóa chứng chỉ là nhạy cảm nên chúng tôi nên khóa quyền truy cập vào thư mục này để chỉ người dùng hiện tại mới có thể truy cập vào:

chmod 700 ~/client-ssl

Bây giờ, chúng ta có thể sao chép thông tin chứng chỉ vào thư mục mới.

Trên Máy chủ MySQL máy, hiển thị nội dung của chứng chỉ CA bằng cách gõ:

sudo cat /var/lib/mysql/ca.pem

Output-----BEGIN CERTIFICATE-----

. . .

-----END CERTIFICATE-----

Sao chép toàn bộ đầu ra, bao gồm cả BEGIN CERTIFICATE và END CERTIFICATE dòng vào clipboard của bạn.

Trên Ứng dụng khách MySQL, tạo một tệp có cùng tên trong thư mục mới:

nano ~/client-ssl/ca.pem

Bên trong, dán nội dung chứng chỉ được sao chép từ khay nhớ tạm của bạn. Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, hiển thị chứng chỉ ứng dụng khách trên Máy chủ MySQL:

sudo cat /var/lib/mysql/client-cert.pem

Output-----BEGIN CERTIFICATE-----

. . .

-----END CERTIFICATE-----

Một lần nữa, sao chép nội dung vào clipboard của bạn. Hãy nhớ bao gồm dòng đầu tiên và cuối cùng.

Mở tệp có cùng tên trên Ứng dụng khách MySQL trong client-ssl danh mục:

nano ~/client-ssl/client-cert.pem

Dán nội dung từ khay nhớ tạm của bạn. Lưu và đóng tập tin.

Cuối cùng, hiển thị nội dung của tệp khóa ứng dụng khách trên Máy chủ MySQL:

sudo cat /var/lib/mysql/client-key.pem

Output-----BEGIN RSA PRIVATE KEY-----

. . .

-----END RSA PRIVATE KEY-----

Sao chép nội dung được hiển thị, bao gồm cả dòng đầu tiên và dòng cuối cùng vào khay nhớ tạm của bạn.

Trên Ứng dụng khách MySQL, mở một tệp có cùng tên trong client-ssl danh mục:

nano ~/client-ssl/client-key.pem

Dán nội dung từ khay nhớ tạm của bạn. Lưu và đóng tập tin.

Máy khách bây giờ sẽ có tất cả các thông tin cần thiết để truy cập vào máy chủ MySQL. Tiếp theo, chúng ta cần thay đổi người dùng từ xa của mình.

Yêu cầu chứng chỉ từ một CA đáng tin cậy cho người dùng từ xa

Hiện tại, máy khách MySQL có các tệp có sẵn để trình bày chứng chỉ của nó cho máy chủ khi kết nối. Tuy nhiên, máy chủ vẫn chưa được thiết lập để yêu cầu chứng chỉ ứng dụng khách từ một CA đáng tin cậy.

Để thay đổi điều này, hãy đăng nhập lại vào tài khoản gốc MySQL trên Máy chủ MySQL:

mysql -u root -p

Tiếp theo, chúng ta cần phải thay đổi các yêu cầu cho người dùng từ xa của chúng tôi. Thay cho REQUIRE SSL khoản, chúng ta cần áp dụng REQUIRE X509 mệnh đề. Điều này ngụ ý tất cả các bảo mật được cung cấp bởi yêu cầu trước đó, nhưng bổ sung yêu cầu trình khách kết nối để trình bày một chứng chỉ được ký bởi một tổ chức phát hành chứng chỉ mà máy chủ MySQL tin tưởng.

Để điều chỉnh yêu cầu của người dùng, hãy sử dụng ALTER USER chỉ huy:

ALTER USER 'remote_user'@'mysql_client_IP' REQUIRE X509;

Tuôn ra các thay đổi để đảm bảo rằng chúng được áp dụng ngay lập tức:

FLUSH PRIVILEGES;

Thoát ra khỏi trình bao khi bạn kết thúc:

exit

Tiếp theo, chúng tôi có thể kiểm tra để đảm bảo rằng chúng tôi vẫn có thể kết nối.

Kiểm tra chứng chỉ kiểm tra khi kết nối

Bây giờ là thời điểm tốt để kiểm tra xem chúng tôi có thể xác thực cả hai bên khi chúng tôi kết nối không.

Trên Ứng dụng khách MySQL, trước tiên hãy thử kết nối mà không cung cấp chứng chỉ ứng dụng khách:

mysql -u remote_user -p -h mysql_server_IP

OutputERROR 1045 (28000): Access denied for user 'remote_user'@'mysql_client_IP' (using password: YES)

Nếu không cung cấp chứng chỉ ứng dụng khách, máy chủ sẽ từ chối kết nối.

Bây giờ, hãy kết nối trong khi sử dụng --ssl-ca, --ssl-certvà --ssl-key tùy chọn để trỏ đến các tệp có liên quan trong ~/client-ssl danh mục:

mysql -u remote_user -p -h mysql_server_IP --ssl-ca=~/client-ssl/ca.pem --ssl-cert=~/client-ssl/client-cert.pem --ssl-key=~/client-ssl/client-key.pem

Bạn nên đăng nhập thành công. Đăng xuất trở lại để lấy lại quyền truy cập vào phiên trình bao của bạn:

exit

Bây giờ chúng tôi đã xác nhận quyền truy cập vào máy chủ, chúng tôi có thể triển khai một cải tiến khả năng sử dụng nhỏ.

Tạo một tệp cấu hình máy khách MySQL

Để tránh phải chỉ định các tệp chứng chỉ mỗi khi bạn kết nối, chúng tôi có thể tạo một tệp cấu hình máy khách MySQL đơn giản.

Bên trong thư mục chính của bạn trên Ứng dụng khách MySQL máy, tạo một tệp ẩn được gọi là ~/.my.cnf:

nano ~/.my.cnf

Ở đầu tệp, tạo một phần được gọi là [client]. Bên dưới, chúng ta có thể thiết lập ssl-ca, ssl-certvà ssl-key tùy chọn để trỏ đến các tệp mà chúng tôi đã sao chép từ máy chủ. Nó sẽ giống như thế này:

~/.my.cnf

[client]
ssl-ca = ~/client-ssl/ca.pem
ssl-cert = ~/client-ssl/client-cert.pem
ssl-key = ~/client-ssl/client-key.pem

Các ssl-ca tùy chọn yêu cầu máy khách xác minh rằng chứng chỉ được trình bày bởi máy chủ MySQL được ký bởi tổ chức phát hành chứng chỉ mà chúng tôi đã chỉ ra. Điều này cho phép máy khách tin tưởng rằng nó đang kết nối với một máy chủ MySQL tin cậy.

Các ssl-cert và ssl-key tùy chọn trỏ đến các tệp cần thiết để chứng minh cho máy chủ MySQL rằng nó cũng có chứng chỉ đã được ký bởi cùng một tổ chức phát hành chứng chỉ. Chúng ta cần điều này nếu chúng ta muốn máy chủ MySQL xác minh rằng máy khách cũng được CA tin cậy.

Lưu và đóng tệp khi bạn hoàn tất.

Bây giờ, bạn có thể kết nối với máy chủ MySQL mà không cần thêm --ssl-ca, --ssl-certvà --ssl-key tùy chọn trên dòng lệnh:

mysql -u remote_user -p -h mysql_server_ip

Bây giờ, máy khách và máy chủ của bạn sẽ trình bày chứng chỉ khi thương lượng kết nối. Mỗi bên được cấu hình để xác minh chứng chỉ từ xa với chứng chỉ CA mà nó có cục bộ.

Phần kết luận

Máy chủ MySQL của bạn bây giờ sẽ được cấu hình để yêu cầu các kết nối bảo mật cho các máy khách từ xa. Ngoài ra, nếu bạn làm theo các bước để xác thực kết nối bằng cách sử dụng tổ chức phát hành chứng chỉ, một số mức độ tin tưởng được thiết lập bởi cả hai bên mà bên từ xa là hợp pháp.

0