2015-11-24 39 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连接旁边的字符串流。 –