使用WireShark,我发现了问题字符串(希望我这样做了): :
28 | 9.582638 | 192.168.18.128 | 192.168.18.129 | MySQL Response Error 1043
以下是两种情况下WireShark的屏幕截图:
与Windows 8的连接(成功):
与CentOS的连接(失败):
为什么会这样?
/>更新
一个有趣的通知:
通过修改
(192.168.18.1)
主机的Master上的ssluser设置,我已经成功使用Windows 8 192.168.18.1
与Master DB连接-进行了更改:从REQUIRE SSL
更改为REQUIRE X509
。但是,这在从属到主连接的情况下不起作用。我在CentOS-6.3中遇到了SSL复制问题。我正在使用OpenSSL创建客户端证书和服务器证书,并且客户端证书和服务器证书都由同一CA签名。
Error: 1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)
Message: Bad handshake
我收到的所有证书均使用“设置SSL” MySQL帮助页面上的“ MySQL的证书和密钥”部分。
服务器的my.cnf文件:
Server IP: 192.168.18.128
Slave IP: 192.168.18.129
MySQL version 5.1.66 SSL
客户端的my.cnf文件:
[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
在Master上,我使用SSL设置从属用户,如下所示:
[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
要更新从设备,我正在使用以下命令(根据
show master status
命令):CREATE USER 'ssluser'@'192.168.18.129' IDENTIFIED BY 'sslpass';
GRANT REPLICATION SLAVE ON *.* TO 'ssluser'@'192.168.18.129' REQUIRE SSL;
复制本身可以正常工作:
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;
此都是-在Master和Slave上都一样。
但是当我手动检查从Slave到Master的连接时,我收到一个错误。
这是我到目前为止尝试过的选项(每个人都得到相同的结果):
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
重现步骤:
设置/创建客户端和服务器证书签名d由相同的ca
如该线程中所述在客户端和服务器上设置my.cnf文件
在主服务器上为从服务器创建ssluser
mysql -u ssluser -h 192.168.18.128 -p
请注意,对于所有证书,我确实使用了不同的通用名称:用于CA,客户和服务器。
附加信息
验证结果:
[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
证书信息:
[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
客户证书:
[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
服务器证书:
[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
目录权限:
在主服务器上:
[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
在奴隶上:
[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
如果有人可以提出解决方案,我将不胜感激!
#1 楼
尝试制作mysql用户拥有的证书文件,其他人无法读取。也可以使用固定密码进行尝试:
mysql ... --ssl-cipher=AES128-SHA
变更主数据:
CHANGE MASTER TO ... MASTER_SSL_CIPHER='AES128-SHA'
#2 楼
可能的解决方案:如何判断MySQL Server是使用yaSSL还是OpenSSL
,这显示了缺少合适的全局状态值的解决方法。这个想法是检查
Rsa_public_key
状态变量:mysql> show status like '%rsa%';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| Rsa_public_key | |
+----------------+-------+
1 row in set (0.00 sec)
如果使用OpenSSL,则该变量将存在;
其他可能性:
MySQL和SSL连接失败,错误2026(HY000)(堆栈溢出)
#3 楼
如果您尝试了所有操作,但SSL无法正常运行,并且同时在chroot中运行mysqld,则出现错误的原因如下:ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
或
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
可能是因为您忘记在chroot环境中创建dev / random和dev / urandom设备(而openssl lib无法获得熵-它打开了这些设备chroot之后)。您可以通过以下方式解决此问题(将
/srv/mysqld
替换为chroot目录,将mysqld
替换为运行mysqld的用户):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
评论
评论不作进一步讨论;此对话已移至聊天。