通过SSL连接到MySQL

问题描述:

我正在尝试编写一个使用SSL连接到MySQL的python脚本。我已经在1(“通过SSL连接”部分)中测试了示例代码,并且它工作正常。通过SSL连接到MySQL

然而,当我使用Wireshark捕获数据包发送,我没有发现的TLSv1协议报文,但只有TCP数据包:

enter image description here

我期待的TLSv1包,因为当我测试的HTTPS nginx的,Wireshark的不捕捉的TLSv1包:

enter image description here

你能告诉我,为什么我不能一个MySQL会话过程中捕捉的TLSv1包,即使SSL是TUR关于?

谢谢!

参考文献:

1http://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html

+2

投机的一句话:在PHP连接器,如果你使用'localhost'它将覆盖的网络连接广告试图通过本地套接字(或管道连接),因此没有网络流量。如果你想强制网络连接使用'127.0.0.1'。如果对于Python连接器也是如此,则可能没有要捕获的网络流量。 –

+0

@MikeW是的。有可能的!当我做实验时,发现在某些情况下,代码输出“破碎的管道”。我会明天检查。谢谢! – ZillGate

+0

@MikeW,这是一个很好的观点,但如果使用unix套接字而不是通过“127.0.0.1”的网络连接,那么在Wireshark中就不会看到这样的情况。 – Bruno

HTTPS是依赖于从TCP连接( “隐式” SSL/TLS)的开始被建立的SSL/TLS连接的协议。所有的HTTP流量都是通过SSL/TLS进行交换的,并且它是在一个独立的端口上完成的,所以Wireshark知道它应该首先将其解码为SSL/TLS。

MySQL协议是不是(它的“明确的” SSL/TLS):通信以纯文本开始,然后升级到SSL/TLS。 (关于一般herehere这两种模式的更多细节。)

如果你看一下MySQL network protocol documentation,服务器仍然首先发送它的初始握手消息在这两个普通和SSL/TLS连接(“服务器问候”你看在你的捕捉中)。 SSL section of the MySQL internals documentation中还有一个更详细的例子。

在某些情况下,Wireshark的可能无法猜到SSL/TLS已被使用,当它是另一种协议的同一端口的通信的一部分。您可以尝试通过右键单击数据包并选择“Decode As ...”(然后SSL)来强制它将流量解码为SSL/TLS。

这至少应该解释之间的HTTPS和MySQL的不同的行为,对于你所使用Wireshark看到。

考虑到您在此截图中的具体示例,很难说哪一个是客户端,哪一个是服务器,因为您正在从本地主机到本地主机进行通信(如果您选择显示源和目标端口)。

我还没有尝试过自己,但似乎是合理的假设,“登录请求用户=”来自客户端和不支持SSL/TLS完成,这似乎表明,这种特定的连接不使用SSL/TLS。 (我对MySQL网络协议的细节并不熟悉,所以您可以尝试在Wireshark中将流量解码为SSL,以查看会发生什么情况。如果没有关于您的设置的更多详细信息,在客户端和服务器)