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):
Kết nối từ CentOS (Không thành công):
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.1
máy chủ - đã thực hiện thay đổi: từ REQUIRE SSL
thà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 status
lệ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:
- thiết lập / tạo cả máy khách và máy chủ được ký bởi cùng một ca.
- 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
- tạo ssluser trên master cho nô lệ
- 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!