我需要访问从OpenSSL C API生成的主密钥生成的加密(密码,写密码)密钥。我知道我可以使用SSL结构访问主密钥,如下所示:
ssl->session->master_key
不幸的是,查看OpenSSL代码并没有让我走得太远,因为API没有很好的文档记录,看着GDB一直很痛苦。它们暴露在任何地方吗?
由于
答案 0 :(得分:1)
我也在做同样的事情。 对于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_state_st
结构的对象,在ssl2.h中定义。你可以从那里看起来。
我不知道TLSv1连接是怎么回事。但是SSL结构中还有一个d1变量。
作为个人注释,openssl源代码实际上是一堆垃圾。没有好的代码评论,没有好的文档。在源代码中徘徊以找到最简单的事情就是痛苦。