Cấu hình MySQL cho SSL, nhưng SSL vẫn TUYỆT VỜI ..!


9

Tôi đã cấu hình SSL cho MySQL bằng cách sử dụng tập lệnh sau.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

Các tệp sau đây đã được tạo:

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

Sau đó, tôi đã kết hợp server-cert.pem và client-cert.pem vào ca.pem (Tôi đã đọc trong một bài đăng để làm như vậy ..)

Tôi đã tạo một người dùng ssl trong MySQL:

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

Tiếp theo tôi đã thêm vào như sau trong my.cnf

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

Sau khi khởi động lại máy chủ, tôi đã kết nối với mysql nhưng SSL vẫn không được sử dụng :(

mysql -u ssluser -p

SSL:                    Not in use

Ngay cả tham số have_ssl vẫn hiển thị bị tắt .. :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

Tôi đã bỏ lỡ bất kỳ bước nào, hoặc có gì sai ..

Câu trả lời với các bước bị bỏ lỡ chi tiết sẽ được đánh giá cao ..


Phiên bản OpenSSL nào bạn đang sử dụng? Và vui lòng kích hoạt lỗi + đăng nhập cảnh báo trong MySQL. Nếu bạn thấy thông báo lỗi "không thể đọc khóa riêng" thì có thể bạn đã gặp phải lỗi này theo một cách nào đó. Tạo khóa mới + certs trên một hệ thống cũ hơn, sử dụng chúng trên MySQL gần đây đã giải quyết vấn đề cho tôi.
gertvdijk

@gertvdijk Tôi đã sử dụng openssl-1.0.1c. Tôi đang kiểm tra nhật ký cho các lỗi được đề cập.
CN

Đầu tiên. Kiểm tra xem mysql có hỗ trợ ssl không. mysql --ssl --helpCũng đừng quên khởi động lại mysql sau khi thực hiện các sửa đổi đó đối với my.cnf
Valentin Bajrami

1
@ val0x00ff có, MySQL hỗ trợ ssl nếu giá trị have_ssl bị tắt.
CN

cố gắng mysql --ssl -u ssluser -pép SSL trên máy khách. Sau đó, người ta có thể xác định lý do tại sao REQuIRE SSL không.
johannes

Câu trả lời:



3

Hãy thử kiểm tra điều này:

  • Cho phép ghi nhật ký đầu ra cảnh báo của MySQL và đọc các mục nhật ký thực tế đó.
  • Kiểm tra quyền của hệ thống tệp để cho phép người dùng chạy MySQL ( mysql?) Để đọc các tệp. Trong /roottôi không nghĩ rằng nó có mặc định.
  • Là Apparmor hoặc SELinux ngăn MySQL đọc các certs và khóa?
  • Bạn có thể gặp phải một lỗi khó chịu của sự không tương thích OpenSSL gần đây so với MySQL. Tôi đã không thể tạo khóa trên Ubuntu 12.04 mà MySQL có thể đọc được, trong khi những cái tôi tạo trên Debian Squeeze hoạt động tốt.

2

Trên Ubuntu, bạn có thể kiểm tra xem apparmorcác khối truy cập vào tệp chứng chỉ của bạn hay không, xem hướng dẫn .

Sau đó, bạn nên kiểm tra quyền / quyền sở hữu tệp và thêm các quyền cần thiết vào /etc/apparmor.d/usr.sbin.mysqld. Xem chủ đề này .



0

Thêm "ssl" trong [mysqld]phần trong my.cnftệp như

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

và sau đó khởi động lại mysql và kiểm tra lại. Nó sẽ làm việc.


0

Tôi tin rằng vấn đề này là do thực tế là bạn chưa chỉ định đường dẫn tệp cho chứng chỉ CA, khóa máy chủ và chứng chỉ máy chủ của bạn một cách chính xác. Nó phải ở định dạng sau ...

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

tức là bạn cần ĐẦY ĐỦ TẬP TIN của các certs và khóa trong thư mục cài đặt mysql của bạn không phải là đường dẫn '/ root /' tương đối.

Đây là một ví dụ từ cài đặt của tôi:

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

Tham khảo liên kết sau để biết thêm thông tin. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html


Các đường dẫn của anh ta bắt đầu bằng một /, có nghĩa là chúng là các đường dẫn đầy đủ, không phải là các đường dẫn tương đối. /root/là thư mục gốc cho người dùng root trên hệ thống unix.
bobpaul
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.