UPDATE2
Menggunakan WireShark saya menemukan string masalah (saya harap saya tahu):
28 | 9.582638 | 192.168.18.128 | 192.168.18.129 | MySQL Response Error 1043
Dan kesalahannya adalah (menurut dokumen ):
Error: 1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)
Message: Bad handshake
Berikut adalah screenshot dari WireShark dalam dua kasus:
Koneksi dari Windows 8 (Sukses):
Koneksi dari CentOS (Gagal):
Mengapa ini terjadi?
MEMPERBARUI
Satu pemberitahuan menarik:
Saya telah berhasil terhubung dengan Master DB menggunakan Windows 8 (192.168.18.1)
dengan mengubah pengaturan ssluser pada Master untuk 192.168.18.1
host - membuat perubahan: dari REQUIRE SSL
ke REQUIRE X509
. Namun ini tidak berfungsi dalam kasus kami dengan koneksi slave-to-master.
Saya menghadapi masalah replikasi SSL di CentOS-6.3. Saya menggunakan OpenSSL untuk membuat klien dan sertifikat server dan klien dan sertifikat server ditandatangani oleh CA yang sama.
Server IP: 192.168.18.128
Slave IP: 192.168.18.129
MySQL version 5.1.66 SSL
Semua sertifikat yang saya terima menggunakan bagian "Menyiapkan Sertifikat SSL dan Kunci untuk MySQL" pada halaman bantuan MySQL.
File my.cnf server :
[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
File my.cnf klien :
[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
Pada Master, saya mengatur pengguna budak dengan SSL seperti ini:
CREATE USER 'ssluser'@'192.168.18.129' IDENTIFIED BY 'sslpass';
GRANT REPLICATION SLAVE ON *.* TO 'ssluser'@'192.168.18.129' REQUIRE SSL;
Untuk memperbarui Slave saya menggunakan perintah berikut (sesuai dengan show master status
perintah):
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;
Replikasi itu sendiri berfungsi dengan baik:
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
Ini adalah keduanya - pada Master dan pada Slave.
Tetapi ketika saya secara manual memeriksa koneksi dari Slave ke Master saya menerima kesalahan.
Berikut adalah opsi yang saya coba sejauh ini (hasil yang sama dari semua orang):
[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
Langkah-langkah untuk Mereproduksi:
- setup / buat klien dan sertifikat server yang ditandatangani oleh ca.
- setup kedua file my.cnf di klien dan server seperti yang disebutkan di utas ini
- buat ssluser pada master untuk slave
- mysql -u ssluser -h 192.168.18.128 -p
Harap perhatikan, saya memang menggunakan Nama Umum yang berbeda untuk semua sertifikat: untuk CA, klien dan server.
INFORMASI TAMBAHAN
Hasil verifikasi:
[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
Informasi sertifikat:
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
Sertifikat klien:
[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
Sertifikat Server:
[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
Direktori Izin:
Tentang Guru:
[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
Pada Budak:
[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
Jika seseorang dapat menyarankan solusinya, saya akan sangat menghargai ini!
sumber
Jawaban:
Cobalah membuat file sertifikat yang dimiliki oleh pengguna mysql dan tidak dapat dibaca oleh orang lain.
Anda dapat mencoba juga dengan cipher tetap:
mysql ... --ssl-cipher=AES128-SHA
Dan untuk master perubahan:
CHANGE MASTER TO ... MASTER_SSL_CIPHER='AES128-SHA'
sumber
Solusi yang memungkinkan:
Bagaimana cara mengetahui apakah MySQL Server menggunakan yaSSL atau OpenSSL
Itu menunjukkan solusi untuk kurangnya nilai status global yang cocok. Idenya adalah untuk memeriksa
Rsa_public_key
variabel status:Jika OpenSSL digunakan, variabel itu akan ada; selain itu yaSSL.
Kemungkinan lain:
Koneksi MySQL dan SSL gagal ERROR 2026 (HY000) (Stack Overflow)
sumber
Jika Anda mencoba semuanya, tetapi SSL tidak berfungsi, dan pada saat yang sama Anda menjalankan mysqld di chroot, maka penyebab kesalahan seperti:
atau
Bisa jadi Anda lupa membuat perangkat dev / acak dan dev / urandom di lingkungan chroot (dan openssl lib tidak dapat memperoleh entropi - itu membuka perangkat ini setelah chroot). Anda dapat memperbaikinya dengan cara ini (ganti
/srv/mysqld
dengan chroot dir Anda danmysqld
dengan mysqld pengguna berjalan di bawah):sumber