我正在尝试将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
我正在浏览更多源代码,我发现这个文件是相关的。
查看上面的代码,我注意到可以设置更多的环境变量。有人知道SSLDEBUG环境是否可以像SSLKEYLOG变量一样设置。任何其他方式或技术也可以帮助
到目前为止,我还没能成功导出密钥。
答案 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机密文件)