2012-07-21 52 views
4

我正在嘗試使用由其他人編寫的GUI Java程序,這不符合我的預期。在程序運行過程中,它會聯繫服務器來拉取數據,但不會顯示正確的數據。我試圖確定我遇到的問題是否與網絡有關---即正確的位從不向客戶提供。解密由Java生成的Wireshark中的客戶端SSL流量HttpsURLConnection

翻閱Java程序的源代碼,它似乎使用HttpsURLConnection類通過SSL從服務器獲取數據。我希望能夠使用Wireshark檢查電線上發生的事情。我的理解是,如果你有相關的密鑰,Wireshark支持解密一些SSL流量。我不控制服務器,因此無法訪問其私鑰。然而,我確實在控制程序運行的客戶端。我的問題是,如何在實踐中配置wireshark來解密我剛纔描述的場景的SSL流量? HttpsURLConnection使用的是否可以添加到Wireshark中?還有別的嗎?

我應該注意到,我已經考慮過簡單地將日誌記錄添加到Java代碼庫中,但最終會更喜歡數據包捕獲的日誌記錄的基本事實,因爲我可能會遺漏/省略代碼庫日誌記錄中的重要內容不完全瞭解。

回答

5

由於您無權訪問服務器私鑰,Wireshark無法直接用於解密。

即使使用私鑰,在使用具有完美前向保密(PFS)的密碼的情況下,Wireshark也無法解密流量。

您需要的是一個Man-in-the-Middle代理服務器,從您的應用程序的角度來看,它就像一個SSL服務器,從服務器的角度來看,它就像客戶端一樣工作。

很多程序可以作爲代理運行,例如.Net/Windows上的FiddlerWebscarabBurpSuite(Java)。對於所有這些程序,您需要導出其使用的服務器證書並將其作爲可信證書添加到您的程序中,例如通過在命令行上指定適當的信任存儲庫啓動您的應用程序(請參閱Java屬性javax.net.ssl.trustStrore)。

+1

如果我無法通過wireshark從服務器解密沒有私鑰的數據,那麼客戶端應用程序能夠如何實現? – hacklikecrack 2013-05-28 13:09:23

+0

這是通過密鑰協議協議完成的。在協議結束時,每一方(客戶,服務器)都知道這個祕密,但祕密本身絕不會在它們之間轉移。另見[Diffie-Hellman密鑰交換(維基百科)](http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange) – Robert 2013-05-28 14:16:09

0

您可以使用extract-ssl-secrets工具從任何Java應用程序中提取Wireshark所需的密鑰。

troubleshooting section,如果它不工作的權利開箱。