OpenSSL可以用来debugging到MySQL服务器的SSL连接吗?

我希望我的web服务器通过SSL连接与MySQL数据库服务器通信。 Webserver运行CentOS5,数据库服务器运行FreeBSD。 证书由中级CA DigiCert提供。

根据my.cnf ,MySQL应该使用ssl

 # The MySQL server [mysqld] port = 3306 socket = /tmp/mysql.sock ssl ssl-capath = /opt/mysql/pki/CA ssl-cert = /opt/mysql/pki/server-cert.pem ssl-key = /opt/mysql/pki/server-key.pem 

当我启动MySQL时,守护进程启动没有错误。 这表明证书文件都是可读的。

但是当我尝试从Web服务器连接到数据库服务器时,出现错误:

 [root@webserver ~]# mysql -h mysql.example.org -u user -p ERROR 2026 (HY000): SSL connection error 

如果我尝试用openssl进一步debugging:

 [root@webserver ~]# openssl s_client -connect mysql.example.org:3306 0>/dev/null CONNECTED(00000003) 15706:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:588: 

这是testing到MySQL数据库服务器的SSL连接的有效方法吗? SSL23_GET_SERVER_HELLO:unknown protocol消息很奇怪,因为这通常是您在用于非SSLstream量的端口上讲SSL的时候会看到的。

对于LDAP和HTTP服务器,这个openssl命令似乎也能正常工作:

 $ openssl s_client -connect ldap.example.org:636 0>/dev/null CONNECTED(00000003) depth=2 /C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority ... $ openssl s_client -connect www.example.org:443 0>/dev/null CONNECTED(00000003) depth=0 /DC=org/DC=example/OU=Services/CN=www.example.org 

回答我自己的问题。 如果你有一个好的,权威的来源更好的答案,请发表一个答案。

简短的回答; 不,OpenSSL不能用于debuggingMySQL SSL连接。 这是因为MySQL使用明文启动会话,然后切换到SSL。

在阅读https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase.html时 ,MySQL以明文连接开始,然后启动实际的SSL。 这解释了MySQL如何能够在一个端口(端口3306)上侦听明文和encryption连接。 将其与HTTP或LDAP服务器进行比较,其中一个端口用于明文连接,另一个端口用于encryption连接。

它从客户端连接()到可能发送ERR包的服务器,并完成握手或发送一个初始握手包,客户端用握手响应包来回答。 在这个阶段,客户端可以请求SSL连接,在这种情况下,SSL通信通道在客户端发送其authentication响应之前build立

此问题的一个常见原因是CA证书的通用名称(CN)与服务器和/或客户机证书相同。

看到这里: https : //dev.mysql.com/doc/refman/5.6/en/creating-ssl-certs.html

尝试重新创build您的CA和证书,并确保在所有情况下都使用唯一的CN。

我遇到了与Ubuntu服务器通信的MacOS X客户端类似的问题。

你可以检查连接是否工作,如果你没有客户端证书和客户端密钥,只有服务器证书的CA? 你能build立一个encryption连接吗? 这通常需要关联用户的ssl_type列的ANY设置。

只是想要说明一下,如果你想在MySQL和客户端之间使用一个负载平衡器(例如F5或HAProxy),你需要将你的SSL证书从负载平衡器导入MySQL服务器。 这是由于类似STARTTLS的连接启动。