SSLを使用してMySQLに接続するPythonスクリプトを作成しようとしています。私は、サンプルコードをテストしている1(セクション「SSL経由の接続」)、およびそれが正常に動作します。
ただし、wiresharkを使用して送信されたパケットをキャプチャすると、TLSv1プロトコルパケットは見つかりませんでしたが、TCPパケットのみが見つかりました。
nginxのHTTPSをテストしたときに、wiresharkがTLSv1パケットをキャプチャするため、TLSv1パケットを期待しています。
SSLがオンになっているのに、MySQLセッション中にTLSv1パケットをキャプチャできない理由を教えてください。
ありがとうございました!
参照:
1 http://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html
HTTPSは、TCP接続の開始から確立されているSSL / TLS接続(「暗黙の」SSL / TLS)に依存するプロトコルです。すべてのHTTPトラフィックはSSL / TLSを介して交換され、個別のポートで行われるため、Wiresharkは最初にSSL / TLSとしてデコードすることが期待されていることを認識しています。
MySQLプロトコルはそうではありません(「明示的な」SSL / TLSです)。通信はプレーンテキストで開始され、SSL / TLSにアップグレードされます。(これら2つのモードの詳細については、こことここを参照してください。)
あなたが見ればMySQLのネットワークプロトコルのドキュメント、サーバーはまだ両方平野およびSSL / TLS接続(あなたのキャプチャで見ることを「サーバーの挨拶」)に最初にその初期ハンドシェイクメッセージを送信します。MySQL内部ドキュメントのSSLセクションにも詳細な例があります。
場合によっては、同じポートでの別のプロトコルの通信の一部である場合、WiresharkはSSL / TLSが使用されたと推測できないことがあります。パケットを右クリックして[DecodeAs ...](次にSSL)を選択すると、トラフィックをSSL / TLSとして強制的にデコードすることができます。
これは、Wiresharkで見られるものに関して、HTTPSとMySQLの動作の違いを少なくとも説明するはずです。
このスクリーンショットの特定の例を考えると、ローカルホストからローカルホストに通信しているため、どちらがクライアントでどちらがサーバーであるかを判断するのは困難です(送信元ポートと宛先ポートを表示することを選択した場合はより見やすくなります) 。
自分で試したことはありませんが、「Login Request user =」はクライアントから送信され、SSL / TLSを介して行われていないと想定するのが妥当と思われます。これは、この特定の接続がSSL / TLSを使用していないことを示しているようです。 。(MySQLネットワークプロトコルの詳細に精通していないため、WiresharkでトラフィックをSSLとしてデコードして、何が起こるかを確認することができます。また、クライアントの両方で、設定の詳細がないと、これ以上答えることは困難です。およびサーバー。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加