Kích hoạt SSL trong MySQL


24

Tôi đang chạy Ubuntu Server 12.04 và tôi muốn kích hoạt kết nối SSL với MySQL.

Tôi đã tạo các tệp khóa / certs sau bằng OpenSSL:

  • ca-cert.pem
  • máy chủ-cert.pem
  • máy chủ-key.pem

Tôi đã lưu trữ chúng tại /etc/mysql, sau đó thêm các dòng sau vào /etc/mysql/my.cnf:

ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

Tiếp theo, tôi khởi động lại máy chủ với sudo service restart mysql.

Tuy nhiên, điều này dường như không kích hoạt SSL. Trong một phiên mysql:

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

Có ý tưởng nào tôi đang thiếu không? Cảm ơn


2
Kiểm tra chủ đề tuyệt vời này .. Có lẽ nó có thể giúp bạn.
SirCharlo

Cảm ơn liên kết SirCharlo, nhưng vấn đề được giải quyết trong chủ đề đó dường như không áp dụng cho tình huống của tôi.
khách93746

1
Những gì @SirCharlo đề cập là nơi bạn muốn tìm. Cụ thể là phần Apparmor và bài # 10 . Các khóa tôi đã tạo trên Debian Squeeze hoặc Ubuntu cũ hơn đều hoạt động tốt - tái tạo vào 12.04 khiến nó bị lỗi lần nữa. Xem nhật ký lỗi MySQL là tốt.
gertvdijk

2
Tôi đã có câu hỏi tương tự và dành hàng giờ cho nó, nhưng câu trả lời của @ user262116 đã giải quyết nó. Tôi khuyến khích bạn chấp nhận câu trả lời đó nếu nó giúp bạn!
elixenide

Câu trả lời:


33

Ubuntu 12.04 đi kèm với OpenSSL 1.0.1, có một số mặc định khác so với phiên bản OpenSSL 0.9.8 cũ.

Trong số những thứ khác, nếu bạn đang sử dụng openssl req -newkey rsa:2048để tạo khóa RSA, bạn sẽ kết thúc bằng một khóa có định dạng gọi là PKCS # 8 . Được biểu thị ở định dạng PEM, các khóa này có -----BEGIN PRIVATE KEY-----tiêu đề chung hơn , không cho bạn biết đó là loại khóa nào (RSA, DSA, EC).

Trước đây, với OpenSSL 0.9.8, các khóa luôn ở định dạng có tên PKCS # 1 , được biểu thị là PEM, có tiêu đề -----BEGIN RSA PRIVATE KEY-----.

Do đó, bạn không thể thay đổi tiêu đề và chân trang từ:

-----BEGIN PRIVATE KEY-----

đến

-----BEGIN RSA PRIVATE KEY-----`

Đó không phải là điều tương tự và nó sẽ không hoạt động. Thay vào đó, bạn cần chuyển đổi khóa sang định dạng cũ bằng cách sử dụng openssl rsa. Như thế này:

openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem

MySQL (v5.5.35) trên Ubuntu 12.04 đang sử dụng triển khai SSL có tên là yaSSL (v2.2.2). Nó hy vọng các khóa có định dạng PKCS # 1 và không hỗ trợ định dạng PKCS # 8 được sử dụng bởi OpenSSL 1.0 và mới hơn. Nếu bạn chỉ đơn giản thay đổi đầu trang và chân trang, như được đề xuất bởi các bài đăng khác trong chuỗi này, MySQL / yaSSL sẽ không phàn nàn, nhưng bạn sẽ không thể kết nối và thay vào đó là một lỗi như thế này:

ERROR 2026 (HY000): SSL connection error: protocol version mismatch

Ubuntu 14.04 đi kèm với OpenSSL 1.0.1f và các cài đặt mới. Trong số những thứ khác, nó sẽ tạo ra các chứng chỉ với các bản tóm tắt SHA256 thay vì SHA1, được sử dụng trong các phiên bản trước. Ngẫu nhiên, phiên bản yaSSL đi kèm với MySQL cũng không hỗ trợ điều này.

Nếu bạn đang tạo chứng chỉ để sử dụng với MySQL, hãy nhớ đảm bảo rằng các khóa RSA được chuyển đổi sang định dạng PEM PKCS # 1 truyền thống và các chứng chỉ đó đang sử dụng các bản tóm tắt SHA1.

Dưới đây là ví dụ về cách tạo CA của riêng bạn, chứng chỉ máy chủ và chứng chỉ ứng dụng khách.

# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730  -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem

# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem

1
Bài này đã lưu ngày cho tôi! Giải thích tuyệt vời và giải pháp.
Generalopinion

Tôi đã nhận được 'ERROR 2026 (HY000): Lỗi kết nối SSL: ASN: trước ngày trong tương lai'
Nitsan Baleli

Thật không may, tôi vẫn gặp ERROR 2026 (HY000): SSL connection error: protocol version mismatchlỗi (sử dụng OpenSSL 1.0.1f). Tôi đã chuyển sang OpenSSL 1.0.1e và nó hoạt động với các hướng dẫn ở trên.
Jarrett

2
Câu trả lời này thật tuyệt vời - sẽ trao một khoản tiền thưởng lớn nếu tôi có thể. Giải thích tuyệt vời cho vấn đề.
elixenide

Một giọng nói khác để thêm vào đám. Đã tìm kiếm trên Internet cố gắng tìm một giải pháp cho lý do tại sao tài liệu MySQL được thiết lập sẽ không hoạt động - phần dưới cùng của bài đăng này đã hoàn toàn cứu tôi.
Steve Chambers

4

Điều này đã giúp tôi:

Đầu trang và chân trang của tệp server-key.pem trông như thế:

-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----

Nhưng nó đòi hỏi một cái gì đó như thế:

-----BEGIN RSA PRIVATE KEY-----
...
...
-----END RSA PRIVATE KEY-----

Lưu ý KHÓA RIÊNG BEGIN RSA

Để xem nhật ký:

sudo vim /var/log/mysql/error.log

Hi vọng điêu nay co ich.


Tôi đã gặp một vấn đề tương tự trong Ubunbtu 12.04 của tôi với mysql 5.5.34, trong đó tất cả các tệp pem đều có thể đọc được và vẫn cho tôi vấn đề tương tự. Nhưng câu trả lời này kết hợp với việc thay đổi chủ sở hữu đã làm điều đó.
Tommy Andersen

Đừng thêm "RSA" theo cách thủ công - điều này sẽ chỉ khắc phục lỗi, nhưng SSL sẽ không hoạt động (bạn sẽ gặp một lỗi khác, " lỗi kết nối SSL: phiên bản giao thức không khớp "). Chuyển đổi từ định dạng PKCS # 8 sang định dạng PKCS # 1 thay vì sử dụngopenssl rsa
rustyx

3

Tôi đã có những rắc rối tương tự vào ngày 12.04 nhưng thực tế nó đã gây ra sự cố.

Tôi tìm thấy một giải pháp tại Diễn đàn Ubuntu , di chuyển .pemcác tệp trong việc /etc/mysqlgiải quyết nó.

Bạn cũng có thể thay đổi cấu hình apparmor trong /etc/apparmor.d/usr.sbin.mysqld.


Đây cũng là vấn đề tôi gặp phải
Jonathan

đó có phải là một lỗi đánh máy không? bạn có nghĩa là "di chuyển tập tin pem đến" thay vì "di chuyển tập tin pem trong"? xin lỗi vì quá quan trọng nhưng tôi đã có một chút bối rối
knocte

1

Đảm bảo rằng người dùng đang chạy quy trình mysqld có quyền truy cập đọc vào các khóa và tệp chứng chỉ. Nếu bạn khởi chạy MySQL bằng tài khoản "mysql", bạn sẽ:

/etc/mysql$ chown mysql:mysql *.pem
/etc/mysql$ ls -l *.pem
-rwxrwx--- 1 mysql mysql 1631 2013-09-16 14:27 ca-cert.pem
-rwxrwx--- 1 mysql mysql 1281 2013-09-16 14:27 server-cert.pem
-rwxrwx--- 1 mysql mysql 1679 2013-09-16 14:27 server-key.pem

Nếu không, bạn có thể nhận được những điều sau trong nhật ký lỗi của mình:

SSL error: Unable to get certificate from '/etc/mysql/server-cert.pem'
130916 13:32:25 [Warning] Failed to setup SSL
130916 13:32:25 [Warning] SSL error: Unable to get certificate

Tuyệt quá. Nhưng làm thế nào điều này có thể được thực hiện? Hãy dành thời gian và giải thích thêm, cung cấp thêm thông tin :)
Lucio

Điều này kết hợp với việc thêm RSA vào tệp server-key.pem đã thực hiện thủ thuật này.
Tommy Andersen

1

Trên Ubuntu 16.04, tôi ran mysql_ssl_rsa_setup, có thể thấy các tập tin trong chương trình biến như trong câu hỏi, nhưng have_sslhave_openssltiếp tục DISABLED.

Giải pháp là chown mysql.mysql /var/lib/mysql/*.pem. Ngoài ra, tôi giả sử nếu bạn chạy mysql_ssl_rsa_setup với tư cách là người dùng mysql, nó sẽ tạo các tệp với quyền chính xác.


Câu hỏi là bốn năm hai tháng tuổi ... Không chắc OP sẽ trả lời câu trả lời của bạn.
WinEunuuchs2Unix

1
Tôi đã đăng bài này đơn giản như một dịch vụ cho độc giả trong tương lai vì đây là một trong những kết quả tìm kiếm hàng đầu của google cho vấn đề này và không có gì tôi đọc giúp giải quyết vấn đề của tôi. Giá trị của câu trả lời này đề cập đến trạng thái của thế giới trong Ubuntu 12.04 và thậm chí 14.04 là mất đi sự liên quan.
Craig Wright

@ WinEunuuchs2Unix Có thể không phải là OP, nhưng tôi ở đây, gần hai năm sau tìm kiếm chính xác câu trả lời này. Vì vậy, cảm ơn bạn Craig!
Oldskool

0

Tệp khóa riêng sẽ trông như (định dạng PKCS # 1):

-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----

Nếu khóa riêng của bạn bắt đầu thay thế bằng:

-----BEGIN PRIVATE KEY-----

(Định dạng PKCS # 8), sau đó bạn nên chuyển đổi nó như thế này:

openssl rsa -in server-key.pem -out server-key.pem

Đừng tự tay thêm thẻ "thiếu" " RSA, vì định dạng khác nhau.


-1

Các tùy chọn khởi động SSL phải ở gần đầu tệp my.cnf của bạn hoặc chúng có thể bị bỏ qua. Tôi gặp vấn đề khi chạy mysql 5.6 trên RHEL 6.4 trong đó các biến SSL bị bỏ qua, tôi đã có chúng ở cuối tệp my.cnf. Tôi đã di chuyển chúng ở đầu tệp (ngay bên dưới [mysqld]) sau đó tôi khởi động lại máy chủ và mọi thứ đều ổn.

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.