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

Modified on: Tue, 20 Aug 2019 03:00:02 +0800

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

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

# 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时,守护进程启动时没有错误。这表明证书文件都是可读的。

但是当我尝试从网络服务器连接到数据库服务器时,我收到一个错误:

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

如果我尝试使用openssl进一步调试:

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

这是测试与MySQL数据库服务器的SSL连接的有效方法吗? SSL23_GET_SERVER_HELLO:unknown protocol消息很奇怪,因为如果您在用于非SSL流量的端口上说SSL,通常会看到这种情况。

这个相同的openssl命令似乎可以正常使用LDAP& HTTP服务器:

$ 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不能用于调试MySQL SSL连接。这是因为MySQL使用明文启动会话,然后切换到SSL。

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

  

它从客户端connect()开始到服务器,该服务器可以发送ERR数据包并完成握手或发送客户端用握手响应数据包应答的初始握手数据包。在此阶段,客户端可以请求SSL连接,在这种情况下,在客户端发送其身份验证响应之前建立SSL通信通道


相关问答

添加新评论