Lỗi kết nối SSL MySQL 5.1.66 ERROR 2026 (HY000)


37

CẬP NHẬT2

Sử dụng WireShark tôi đã tìm ra chuỗi vấn đề (tôi hy vọng tôi đã làm):

28 | 9.582638 | 192.168.18.128 | 192.168.18.129 | MySQL Response Error 1043

Và lỗi là (theo tài liệu ):

Error: 1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)
Message: Bad handshake 

Dưới đây là ảnh chụp màn hình của WireShark trong hai trường hợp:

Kết nối từ Windows 8 (Thành công):

nhập mô tả hình ảnh ở đây

Kết nối từ CentOS (Không thành công):

nhập mô tả hình ảnh ở đây

Lý do tại sao điều này xảy ra?


CẬP NHẬT

Một thông báo thú vị:
Tôi đã kết nối thành công với Master DB bằng Windows 8 (192.168.18.1)bằng cách sửa đổi cài đặt ssluser trên Master cho 192.168.18.1máy chủ - đã thực hiện thay đổi: từ REQUIRE SSLthành REQUIRE X509. Tuy nhiên, điều này không hoạt động trong trường hợp của chúng tôi với kết nối nô lệ-chủ.


Tôi đã phải đối mặt với vấn đề sao chép SSL trong CentOS-6.3. Tôi đang sử dụng OpenSSL để tạo cả chứng chỉ máy khách và máy chủ và cả chứng chỉ máy khách và máy chủ đều được ký bởi cùng một CA.

Server IP: 192.168.18.128
Slave  IP: 192.168.18.129
MySQL version 5.1.66 SSL

Tất cả các chứng chỉ tôi nhận được bằng cách sử dụng phần "Thiết lập chứng chỉ SSL và khóa cho MySQL" trong các trang trợ giúp của MySQL.

Tập tin my.cnf của máy chủ :

[mysqld]
ssl-key=/etc/mysql/certs/server-key.pem
ssl-cert=/etc/mysql/certs/server-cert.pem
ssl-ca=/etc/mysql/certs/ca-cert.pem

Tập tin my.cnf của khách hàng :

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

Trên Master tôi thiết lập người dùng nô lệ với SSL như thế này:

CREATE USER 'ssluser'@'192.168.18.129' IDENTIFIED BY 'sslpass';
GRANT REPLICATION SLAVE ON *.* TO 'ssluser'@'192.168.18.129' REQUIRE SSL;

Để cập nhật Slave tôi đang sử dụng lệnh sau (theo show master statuslệnh):

SLAVE STOP;
CHANGE MASTER TO \
             MASTER_HOST='192.168.18.128',                      \
             MASTER_USER='sslreplicant',                        \
             MASTER_PASSWORD='db.sslreplicantprimary',          \
             MASTER_LOG_FILE='mysql-bin.000026',                \
             MASTER_LOG_POS=106,                                \
             MASTER_SSL=1,                                      \
             MASTER_SSL_CA='/etc/mysql/certs/ca-cert.pem',      \
             MASTER_SSL_CAPATH='/etc/mysql/certs/',             \
             MASTER_SSL_CERT='/etc/mysql/certs/client-cert.pem',\
             MASTER_SSL_KEY='/etc/mysql/certs/client-key.pem';
SLAVE START;

Bản sao hoạt động tốt:

mysql> SHOW VARIABLES LIKE '%ssl%';

have_openssl  = YES
have_ssl      = YES
ssl_ca        = /etc/mysql/certs/ca-cert.pem
ssl_capath    =
ssl_cert      = /etc/mysql/certs/server-cert.pem
ssl_cipher    =
ssl_key       = /etc/mysql/certs/server-key.pem

Đây là cả hai - trên Master và trên Slave.

Nhưng khi tôi kiểm tra thủ công kết nối từ Slave đến Master thì tôi gặp lỗi.

Dưới đây là các tùy chọn tôi đã thử cho đến nay (kết quả tương tự từ mọi người):

[gahcep@localhost  ~]$ mysql -u ssluser -h 192.168.18.128 -p

[gahcep@localhost  ~]$ mysql --ssl --ssl-ca=/etc/mysql/certs/ca-cert.pem \
                             -u ssluser -h 192.168.18.128 -p

[gahcep@localhost ~]$ mysql --ssl-ca=/etc/mysql/certs/ca-cert.pem \
                            --ssl-cert=/etc/mysql/certs/client-cert.pem \
                            --ssl-key=/etc/mysql/certs/client-key.pem \
                            -u ssluser -h 192.168.18.128 -p

Enter password:
ERROR 2026 (HY000): SSL connection error

Các bước để sinh sản:

  1. thiết lập / tạo cả máy khách và máy chủ được ký bởi cùng một ca.
  2. thiết lập cả hai tập tin my.cnf trên máy khách và máy chủ như được đề cập trong chuỗi này
  3. tạo ssluser trên master cho nô lệ
  4. mysql -u ssluser -h 192.168.18.128 -p

Xin lưu ý, tôi thực sự đã sử dụng các Tên chung khác nhau cho tất cả các chứng chỉ: cho CA, clien và máy chủ.


THÔNG TIN THÊM

Kết quả xác minh:

[gahcep@localhost ~]$ sudo openssl verify -purpose sslclient \
           -CAfile /etc/mysql/certs/ca-cert.pem /etc/mysql/certs/client-cert.pem
/etc/mysql/certs/client-cert.pem: OK

[gahcep@localhost ~]$ sudo openssl verify -purpose sslserver \
           -CAfile /etc/mysql/certs/ca-cert.pem /etc/mysql/certs/server-cert.pem
/etc/mysql/certs/server-cert.pem: OK

Thông tin chứng nhận:

CA:

[gahcep@localhost ~]$ sudo openssl x509 -noout -subject -issuer -dates \
           -serial -hash -fingerprint -in /etc/mysql/certs/ca-cert.pem
subject= /C=RU/L=Vladivostok/O=Default Company Ltd/CN=PriSec
issuer= /C=RU/L=Vladivostok/O=Default Company Ltd/CN=PriSec
notBefore=Jan  4 06:27:46 2013 GMT
notAfter=Nov 13 06:27:46 2022 GMT
serial=B45D177E85F99578
c2c5b88b
SHA1 Fingerprint=5B:07:AA:39:28:24:CE:1A:CF:35:FA:14:36:23:65:8F:84:61:B0:1C

Chứng chỉ khách hàng:

[gahcep@localhost ~]$ sudo openssl x509 -noout -subject -issuer -dates \
           -serial -hash -fingerprint -in /etc/mysql/certs/client-cert.pem
subject= /C=RU/L=Vladivostok/O=Default Company Ltd/CN=Secondary
issuer= /C=RU/L=Vladivostok/O=Default Company Ltd/CN=PriSec
notBefore=Jan  4 06:29:07 2013 GMT
notAfter=Nov 13 06:29:07 2022 GMT
serial=01
6df9551f
SHA1 Fingerprint=F5:9F:4A:14:E8:96:26:BC:71:79:43:5E:18:BA:B2:24:BE:76:17:52

Chứng chỉ máy chủ:

[gahcep@localhost ~]$ sudo openssl x509 -noout -subject -issuer -dates \
            -serial -hash -fingerprint -in /etc/mysql/certs/server-cert.pem
subject= /C=RU/L=Vladivostok/O=Default Company Ltd/CN=Primary
issuer= /C=RU/L=Vladivostok/O=Default Company Ltd/CN=PriSec
notBefore=Jan  4 06:28:25 2013 GMT
notAfter=Nov 13 06:28:25 2022 GMT
serial=01
64626d57
SHA1 Fingerprint=39:9E:7A:9E:60:9A:58:68:81:2F:90:A5:9B:BF:E8:26:C5:9D:3C:AB

Thư mục Quyền:

Về thầy:

[gahcep@localhost ~]$ ls -la /etc/mysql/certs/
drwx------. 3 mysql  mysql  4096 Jan  3 23:49 .
drwx------. 3 mysql  mysql  4096 Jan  3 07:34 ..
-rw-rw-r--. 1 gahcep gahcep 1261 Jan  3 22:27 ca-cert.pem
-rw-rw-r--. 1 gahcep gahcep 1675 Jan  3 22:27 ca-key.pem
-rw-rw-r--. 1 gahcep gahcep 1135 Jan  3 22:28 server-cert.pem
-rw-rw-r--. 1 gahcep gahcep 1679 Jan  3 22:28 server-key.pem
-rw-rw-r--. 1 gahcep gahcep  976 Jan  3 22:28 server-req.pem

Trên nô lệ:

[gahcep@localhost ~]$ ls -la /etc/mysql/certs/
drwx------. 3 mysql mysql 4096 Jan  3 22:57 .
drwx------. 3 mysql mysql 4096 Jan  3 07:50 ..
-rw-r--r--. 1 root  root  1261 Jan  3 22:56 ca-cert.pem
-rw-r--r--. 1 root  root  1139 Jan  3 22:57 client-cert.pem
-rw-r--r--. 1 root  root  1675 Jan  3 22:57 client-key.pem

Nếu ai đó có thể đề xuất giải pháp, tôi thực sự sẽ đánh giá cao điều này!


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Paul White nói GoFundMonica

Câu trả lời:


2

Hãy thử tạo các tệp chứng chỉ thuộc sở hữu của người dùng mysql và người khác không thể đọc được.

Bạn cũng có thể thử với một mật mã cố định:

mysql ... --ssl-cipher=AES128-SHA

Và đối với bậc thầy thay đổi:

CHANGE MASTER TO ... MASTER_SSL_CIPHER='AES128-SHA'


1

Phương pháp khả thi:

Cách nhận biết liệu Máy chủ MySQL sử dụng yaSSL hay OpenSSL

Điều đó cho thấy một cách giải quyết cho việc thiếu giá trị trạng thái toàn cầu phù hợp. Ý tưởng là để kiểm tra Rsa_public_keybiến trạng thái:

mysql> show status like '%rsa%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| Rsa_public_key |       |
+----------------+-------+
1 row in set (0.00 sec)

Nếu OpenSSL được sử dụng, biến đó sẽ tồn tại; nếu không thì là yaSSL.

Khả năng khác:

Kết nối MySQL và SSL không thành công ERROR 2026 (HY000) (Tràn ngăn xếp)


1

Nếu bạn đã thử tất cả mọi thứ, nhưng SSL không hoạt động, đồng thời bạn đang chạy mysqld trong chroot, thì nguyên nhân gây ra các lỗi như:

ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

hoặc là

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

có thể là bạn đã quên tạo các thiết bị dev / ngẫu nhiên và dev / urandom trong môi trường chroot (và openssl lib không thể có được entropy - nó sẽ mở các thiết bị này sau khi chroot). Bạn có thể sửa nó theo cách này (thay thế /srv/mysqldbằng thư mục chroot của bạn và mysqldvới người dùng mysqld đang chạy bên dưới):

sudo install -d -o mysqld -g mysqld -m 500 /srv/mysqld/dev
sudo mknod -m 444 /srv/mysqld/dev/random c 1 8
sudo mknod -m 444 /srv/mysqld/dev/urandom c 1 9
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.