我正在尝试从Chrome浏览器导出/写入SSL主密钥和密钥到文件。如果有人可以建议我该如何做,我将不胜感激。
要编写premaster密码,我们可以简单地在环境中导出SSLKEYLOGFILE变量。
管理员可以使用premaster机密来解密HTTPS会话。
premaster密码用于计算master密码,该密码进一步用于创建6个密钥-
CLIENT_WRITE_MAC
CLIENT_IV
CLIENT_WRITE
还有3个用于服务器。
我想将这些密钥输出到文件而不是premaster机密。
我想出是否可以使用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
查看上面的代码,我注意到可以设置更多的环境变量。有人知道是否可以使用与SSLKEYLOG变量相同的方式设置SSLDEBUG环境。任何其他方式或技术都可以帮助您
到目前为止,我还无法成功导出密钥。
最佳答案
我想到了。
为此,您需要下载wireshark源代码的最新版本。我在Wireshark 2.0.1上运行了测试
您需要更改wireshark源文件夹中的文件/epan/dissectors/packet-ssl-utils.c。
从第3179-3194行将变量打印到文件中。
您可以找到客户端写密钥,服务器写密钥,客户端MAC密钥,服务器MAC密钥,Cient IV和Server IV)
要用C写文件
文件* fptr;
fptr = fopen(“您要在其中打开文件的目录”,“ a +”);
fprintf(“ data”); //这会将数据写入文件
注意-要更客观地进行操作,请更改并创建以下功能
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 *名称,const StringInfo *数据){
//从4953行复制原始功能
}
现在,使用这些功能将密钥导出到文件中。
转到主Wireshark源文件夹。
运行./autogen.sh
。/配置
须藤制作
须藤使安装
并在终端中运行wireshark。 (您仍然需要通过导出SSLKEYLOGFILE环境变量来给wireshark premaster机密文件供稿)
关于google-chrome - 编写SSL客户端和服务器 key key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36463968/