2010-12-16 102 views
0

我有一臺運行在我的計算機上的客戶端應用程序,該應用程序使用openssl與使用SSLv3的服務器進行通信。我需要看看他們說什麼,所以我基本上想編輯和重新編譯openssl庫以獲取相關的加密密鑰。使用從openssl api獲取的密鑰解密ssl網絡數據包

該應用程序通常使用TLS-DHE-RSA-WITH-AES-256-CBC-SHA作爲密碼套件。有時它使用aes128而不是aes256,但在這個階段這不是關鍵。到目前爲止,我編輯了s3_enc.c文件。在ssl3_setup_key_block函數結束時,我將主密鑰,密鑰塊(因此客戶端服務器寫密鑰,mac密鑰和IV),服務器和客戶端隨機數寫入文件。 http://www.ietf.org/rfc/rfc2246.txt表示如果流密碼是可導出的,則客戶端 - 服務器寫密鑰將被相應地更新爲最終的客戶端 - 服務器寫密鑰。我不確定這個密碼套件是否被認爲是可導出的(無論這意味着什麼),但我仍然創建最終的寫入密鑰。

問題是我試過的任何問題,我無法成功解密使用wireshark獲取的任何數據包。無論結果如何,我的結果都是毫無意義的。我正在考慮在解密後檢查數據包的mac字段,以查看解密是否正確。但這似乎也是一個死路一條。

有沒有人有任何想法我失蹤了,我可能做錯了什麼?

回答

1

如果您可以修改OpenSSL並讓您的客戶端應用程序使用它,那麼您所需要做的就是使修改後的OpenSSL將解密的數據轉儲到文件中。即使在應用程序請求某些加密時,更簡單的選擇是讓OpenSSL使用NULL密碼套件之一。

+0

感謝您的回答。我也嘗試打印解密數據包到文件,但由於openssl源碼是一堆沒有代碼註釋和可靠文檔的垃圾,我無法找到我能在哪裏找到解密的數據包。我不認爲服務器會接受一個空的加密連接,但值得一試。謝謝。 – Yigit 2010-12-16 11:52:26

+0

@Yigit:在'ssl_lib.c'中修補'SSL_read()'和'SSL_write()' - 這些應用程序將調用讀取和寫入連接的明文端的函數。 – caf 2010-12-17 02:03:29

+0

@caf回答評論者,在符號,然後評論者的名字和NO分號後。這是stackoverflow引擎工作的方式。 – 2010-12-17 06:33:38