我正在尝试从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/

10-12 21:46