2011-04-05 147 views
1

我使用OpenSSL庫在客戶端和主機之間的C中創建了一個SSL套接字。 我需要SSL會話的AES密鑰來正確加密消息,我不能使用標準函數ssl_write和ssl_read。 我發現有一個名爲AES_KEY的結構,但我不知道如何找到它!OpenSSL - 查找AES密鑰

SSL_write和SSL_read工作正確地僅與分組類型:23(「應用協議」)

我怎樣才能解密,例如,來自服務器的SSL問候消息(我打開SSL信道與該服務器)?如何加密來自其他客戶端的SSL Hello Client(它位於clair中)?

我試圖在TLS協議的「TLS重新協商」階段演示攻擊。我試圖用自定義代理來模擬MITM的攻擊。

現在,服務器發送代理一定數量的類型22(握手)和20(ChangeCipherSpec)的加密消息。我怎樣才能讀取這些消息並解密它們?標準庫ssl_read僅適用於消息23(應用程序)。

此外,客戶端發送代理客戶端Hello和其他類型22和20的消息。我怎樣才能寫這些消息並加密它們?我嘗試使用ssl_write,但服務器不理解這些消息。

+0

「我不能使用標準函數ssl_write和ssl_read」爲什麼? – Jumbogram 2011-04-05 22:07:55

+0

因爲我想發送個性化的握手消息。 – Michele 2011-04-05 22:09:33

+1

很高興您希望發送個性化的握手消息。但它不回答我的問題。 – Jumbogram 2011-04-05 22:13:53

回答

0

我找到了解決方案。其功能是:

int ssl3_read_bytes (SSL *s, int type, unsigned char *buf, int len, int peek); 
int ssl3_write_bytes (SSL *s, int type, const void *buf_, int len); 
3

而不是手動(en | de)加密記錄,您應該使用SSL_CTX_set_info_callback來獲取所需的信息。

+0

謝謝...所以我必須調用SSL_connect的回調函數,手動生成AES密鑰,然後調用SSL_write()和SSL_read()的其他回調函數?通過這種方式我可以個性化消息,但是我必須爲密鑰生成管理許多問題。我無法理解哪裏存儲了用於加密/解密操作的SSL私鑰。 – Michele 2011-04-05 23:14:06

+1

你不應該做你想做的事情。 – Jumbogram 2011-04-05 23:19:53

+0

是的,對於正常使用你是對的,但我試圖證明TLS類型的重新談判通過考試的攻擊。 – Michele 2011-04-05 23:28:43