2010-05-07 60 views
0

我需要訪問從OpenSSL C API生成的主密鑰生成的加密(密碼,寫)密鑰。我知道我可以使用SSL結構如下訪問主密鑰:來自OpenSSL C的API訪問客戶端寫密鑰和服務器寫密鑰API

ssl->session->master_key 

不幸的是看OpenSSL的代碼沒有得到我很遠,因爲API不是很好的記錄,看着GDB已經痛以及。他們暴露在任何地方?

感謝

回答

0

我工作的同樣的事情爲好。 好了SSLv3的連接,您可以通過訪問密鑰塊,

ssl->s3->tmp.key_block 

不過,我設法在ssl3_setup_key_block方法結束這是在s3_enc.c文件中定義得到這個。我的意思是我改變了源代碼並重新編譯了openssl。所以我不知道它從這個函數返回後是否改變或者丟失了。

這個關鍵塊是一個字符串,其定義如http://www.ietf.org/rfc/rfc2246.txt其結構是;

{ 

clientWriteMACSecret, 

    serverWriteMACSecret, 

    clientWriteKey, 

    serverWriteKey, 

    clientWriteIV, 

    serverWriteIV 

} 

每個部分的長度因使用的密碼套件而異。

對於SSLv2連接,我想你可以通過調用ssl->s2->something再次訪問這些區域。 s2是在ssl2.h中定義的ssl2_state_st結構的對象。你可以從那裏看起來。

我不知道它是如何用於TLSv1連接的。但是SSL結構中也有一個d1變量。

作爲個人記錄,openssl源代碼真的是一堆垃圾。沒有好的代碼評論,沒有好的文檔。徘徊在源代碼內部以尋找最簡單的東西是一種痛苦。