2015-11-24 58 views
0

我被困在檢索SSL握手後生成的Key_block。我實現了一個簡單的Client.cpp/Server.cpp程序,可以很好地交換加密數據。openSSL密鑰塊訪問功能?

我想檢索key_block,因爲我想重新使用它並在另一個通信中執行我自己的加密,但不需要再次握手。

我想:

ssl->s3->tmp.key_block 

,但它檢索一個空字符串,當然

ssl->s3->tmp.key_block_length 

檢索0值(?!)。

我在SSL_accept(ssl)成功後立即調用這些方法。

一旦我已經能夠抓住這個key_block,我需要找到SSL_write(...)所使用的加密功能

希望你能聽到我,因爲OpenSSL的文檔加密,似乎我的眼睛.. =)

+0

密鑰塊僅在握手過程中使用,用於構造*幾個不同的工作密鑰;如果這就是你想要的,那麼沒有單個'the'鍵或'the'函數可以用來模仿SSL_write。如果你只是想要一個共享密鑰用於其他**,自1.0.1以來的OpenSSL版本實現rfc5707來產生派生的共享密鑰;請參閱'tls1.h'頭文件中的'SSL_export_keying_material'。 –

+0

非常感謝dave_thompson_085!我會試着從這些功能中獲得一個共享的祕密。自從一個星期以來,我一直在努力爭取openSSL文檔,你是否有特別的聖經推薦,或者你是否花了很多時間來研究這個主題? –

回答

0

XY問題。你不需要這個。只需打開另一個SSL連接到同一個目標,它應該重新使用相同的SSL會話,因此會使用相同的會話主密鑰。也許即使是相同的會話密鑰,但只要安全可靠,您還在意什麼?您似乎只是試圖避免第二次完整的SSL握手,但您可以通過在客戶端進行適當的配置來完成此操作。

+0

共享會話將使用相同的*主密鑰*; SSL/TLS實際上使用從主密鑰加上每連接隨機數導出的多個(4-6)會話密鑰項。 Asker在服務器上,如果沒有客戶端協作,可能無法「打開」連接; OTOH OpenSSL服務器將自行存儲和查找會話以供重用,而OpenSSL客戶端需要一些配置或回調。 –

+0

@ dave_thompson_085感謝您的糾正,但我不知道服務器提問者是什麼,你也不知道。 – EJP

+0

我正在運行一個簡單的TCP服務器。這只是當前概念的一個證明。我需要的是,我希望使用TCP/SSL會話生成的信息來加密Tcp/ssl連接旁邊的字符串流。 –