2010-05-07 77 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源代码真的是一堆垃圾。没有好的代码评论,没有好的文档。徘徊在源代码内部以寻找最简单的东西是一种痛苦。