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

Writing SSL client and server keys keys

我正在尝试 export/write 将 SSL 主密钥和密钥从 chromium 浏览器下载到一个文件中。如果有人可以建议我如何执行此操作,我将不胜感激。

要写入预主密钥,我们可以简单地在环境中导出 SSLKEYLOGFILE 变量。 premaster secret 可以被 wireshark 用来解密 HTTPS 会话。

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

我想将这些密钥输出到文件而不是预主密钥。

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

另一种方法是更改​​ chromium 浏览器并编译它。我认为这里需要做出改变。 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 密钥、客户端 IV 和服务器 IV)

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

文件*fptr; fptr = fopen("directory you want to open a file in", "a+");

fprintf("data"); // 这会将数据写入文件

注意 - 要以更 objective 的方式进行操作,请更改并创建以下函数

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

//写下面几行

文件 *ssl_debug_file;

ssl_debug_file=fopen("directory you want to open the file in","a+");

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

}

void custom_ssl_print_string(const gchar* 名称, const StringInfo* 数据){

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

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

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

./配置

sudo make

须藤安装

和 运行 终端中的 wireshark。 (您仍然需要通过导出 SSLKEYLOGFILE 环境变量向 wireshark 提供预主密钥文件)