ろば電子が詰まつてゐるスマートフォン用の表示で見るろば電子が詰まつてゐる2014-04-13WiresharkでSSL通信の中身を覗いてみるセキュリティOpenSSLの脆弱性「Heartbleed」が世間を賑わせていますが、色々と乗り遅れてしまった感があるので、ゆるゆると落ち穂拾いをしようかと思います。いう事態になっていますが、なんとなく理論的にそうだろうなと分かるもののイマイチ具体的な手順が分からない。いうわけで今回のテーマとして、手元にサーバの秘密鍵と、SSL通信をパケットキャプチャしたpcapファイルがあるときに、Wiresharkでどんな感じでSSL通信を「ほどく」のか......という具体的な手順を、ハマり所を含めてまとめておこうかと思います。いうか、私自身がハマったので自分用メモですな。この文書では"SSL"とだけ記述し、TLSは無視しています。前提条件とりあえず以下のような感じの検証環境で試しました。手元のWindows7。1.0.1eのhttpsサーバ作成OpenSSLは流行りのHeartbleed持ちだけど、今回の話題とは関係ないので無視サーバ証明書はオレオレ証明書で作成オレオレ証明書の具体的な作成方法は、以前に書いたオレオレ証明書をopensslで作る(詳細版)を参照くださいゲストOS上でtcpdumpしてSSL通信をキャプチャし、そのpcapファイルを手元のWindowsマシンのWiresharkで閲覧する。tcpdumpとWiresharkまずtcpdumpの予備知識をいくつかまとめておきます。tcpdumpコマンドでパケットキャプチャする際に、キャプチャ内容をファイル出力してWiresharkで読み込めるようにするには、-wオプションを利用してpcapファイルとして出力します。0を合わせて指定するのがよく使われる手法です。具体的なコマンドラインは次のようになります。パケットから取り出すバイト数。具体的には、以下のような手順でhttpsなSSL通信のパケットキャプチャをして、pcapファイルを出力してみましょう。message."date実行すると、以下のようにテストメッセージと現時刻が出るだけの簡単なものですね。Wiresharkの設定と操作まずはじめに、Wiresharkに秘密鍵を設定せずにSSL通信をキャプチャするとどうなるかを確認しておきましょう。先述の/cgi-bin/test.cgiにアクセスした通信のキャプチャが以下です。見て分かる通り、暗号化されていて通信内容は何も分かりません。分かるのはTCPレベルでのSrcIPとDstIPだけです。HTTP通信丸ごとを暗号化しているので、レスポンスボディ等だけでなく、リクエストヘッダも分からないことに注意しましょう(つまりボディ部だけでなく、どのページにアクセスしたかすら、httpsでは分からない)。秘密鍵の登録Wiresharkでは、通信先ごとに秘密鍵を事前に登録しておくことで、SSL通信の中身を見ることができます。登録するには、メニューの[Edit]→[Preferences]から、Preferencesウィンドウの[Protocols]→[SSL]を選択します。list]の[Edit]をクリックします。Decrypt]のProfile設定画面となるので、[New]をクリックします。この入力ボックスはちょっと分かりにくいのですが、以下のように入力します。