编写SSL客户端和服务器密钥

时间:2016-04-06 23:15:14

标签: google-chrome ssl https openssl wireshark

我正在尝试将SSL主密钥和密钥导出/写入Chrome浏览器中的文件。如果有人可以建议我怎么做,我将不胜感激。

要编写premaster secret,我们只需在环境中导出SSLKEYLOGFILE变量即可。 wireshark可以使用premaster秘密来解密HTTPS会话。

premaster secret用于计算主秘密,进一步用于创建6个密钥 - CLIENT_WRITE_MAC CLIENT_IV CLIENT_WRITE 还有3个用于服务器。

我想将这些键输出到文件而不是premaster secret。

我想如果我可以使用wireshark代码来输出它,但这更复杂 我相信wireshark处理SSL数据包和使用premaster秘密的代码就在这里。 github.com/boundary/wireshark/blob/master/epan/dissectors/packet-ssl-utils.c

另一种方法是对chrome浏览器进行更改并进行编译。我认为需要在这里做出改变。 https://code.google.com/p/chromium/codesearch#chromium/src/net/third_party/nss/ssl/derive.c&q=client_write_mac_secret&sq=package:chromium&type=cs&l=214

我正在浏览更多源代码,我发现这个文件是相关的。

https://code.google.com/p/chromium/codesearch#chromium/src/net/third_party/nss/ssl/sslsock.c&q=SSLKEYLOG&sq=package:chromium&dr=C&l=3569

查看上面的代码,我注意到可以设置更多的环境变量。有人知道SSLDEBUG环境是否可以像SSLKEYLOG变量一样设置。任何其他方式或技术也可以帮助

到目前为止,我还没能成功导出密钥。

1 个答案:

答案 0 :(得分:0)

我明白了。 为此,您需要下载最新版本的wireshark源代码。我在Wireshark 2.0.1上运行了测试

您需要更改wireshark源文件夹中的文件 - /epan/dissectors/packet-ssl-utils.c。

将变量打印到3179 - 3194行的文件中。 您可以找到客户端写密钥,服务器写密钥,客户端MAC密钥,服务器MAC密钥,Cient IV和服务器IV)

要写入C中的文件,请使用此

档案* fptr; fptr = fopen(“您要在”,“a +”中打开文件的目录);

fprintf中( “数据”); //这会将数据写入文件

注意 - 要以更客观的方式执行此操作,请更改并创建以下功能

void custom_ssl_print_data(const gchar * name,const guchar * data,size_t len){

//写下以下行

文件* ssl_debug_file;

ssl_debug_file = fopen(“你要打开文件的目录”,“a +”);

//从第4927行复制原始功能

}

void custom_ssl_print_string(const gchar * name,const StringInfo * data){

//从第4953行复制原始功能 }

现在使用这些功能将您的密钥导出到文件中。

转到主wireshark源文件夹。 运行./autogen.sh

./配置

sudo make

sudo make install

并在终端中运行wireshark。 (您仍然需要通过导出SSLKEYLOGFILE环境变量来为wireshark提供premaster机密文件)