Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Fiddler で Javaアプリの通信をキャプチャする

皆さんご存じのFiddlerですが、Javaのアプリで通信をキャプチャしてくれなかったのでちょっとだけ調べました。

www.telerik.com

HTTP通信の場合

公式でも触れられていたように、FiddlerのLocal Proxyを使うのが正解みたいです。

以下のように環境変数でProxyを設定してください。javaコマンドに-Dで指定してもかまいません。

    System.setProperty("http.proxyHost", "127.0.0.1");
    System.setProperty("https.proxyHost", "127.0.0.1");
    System.setProperty("http.proxyPort", "8888");
    System.setProperty("https.proxyPort", "8888");

HTTPS(SSL)の場合

Fiddlerでは、HTTPS通信もキャプチャできたりしますが、Javaではその設定をオンにした上で、上記の設定を有効にしても例外が発生し、キャプチャできません。

証明書をごにょる必要があります。Fiddlerの設定画面開いて、HTTPSタブを開きます。[Export Root Certificate to Desktop] ボタンがあるので、まずはデスクトップに保存した後、任意の場所に格納します。

f:id:StateMachine:20151004132516p:plain

次にJDKの keytoolsを使ってストアに格納します。キーストアのパスワードは後で使います。

"C:\Program Files\Java\jdk1.8.0_60\bin\keytool.exe" -import -file  c:\anywhere\FiddlerRoot.cer -keystore FiddlerKeystore -alias Fiddler

次に、以下の設定を追加すれば完了です。

   System.setProperty("javax.net.ssl.trustStore", "C:/anywhere/FiddlerKeystore");
   System.setProperty("javax.net.ssl.trustStorePassword", "somepassword");
     

これで例外が発生せずに、キャプチャできると思います。

参考にしたのは、

eclipse - how to Capture https with fiddler, in java - Stack Overflowあたりです。

では。