MySQL 5.1.66 Kesalahan koneksi SSL ERROR 2026 (HY000)

37

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):

masukkan deskripsi gambar di sini

Koneksi dari CentOS (Gagal):

masukkan deskripsi gambar di sini

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.1host - membuat perubahan: dari REQUIRE SSLke 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 statusperintah):

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:

  1. setup / buat klien dan sertifikat server yang ditandatangani oleh ca.
  2. setup kedua file my.cnf di klien dan server seperti yang disebutkan di utas ini
  3. buat ssluser pada master untuk slave
  4. 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!

gahcep
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Paul White mengatakan GoFundMonica

Jawaban:

2

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'

Antonio Bardazzi
sumber
1

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_keyvariabel status:

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

Jika OpenSSL digunakan, variabel itu akan ada; selain itu yaSSL.

Kemungkinan lain:

Koneksi MySQL dan SSL gagal ERROR 2026 (HY000) (Stack Overflow)

skinfrakki
sumber
1

Jika Anda mencoba semuanya, tetapi SSL tidak berfungsi, dan pada saat yang sama Anda menjalankan mysqld di chroot, maka penyebab kesalahan seperti:

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

atau

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

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/mysqlddengan chroot dir Anda dan mysqlddengan mysqld pengguna berjalan di bawah):

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
Anatoli
sumber