Я тоже работаю над тем же.
Для соединений 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 - это действительно куча мусора. Нет хороших комментариев к коду, нет хорошей документации. Бродить по исходному коду, чтобы найти простейшую вещь, это боль.