【问题标题】:Writing SSL client and server keys keys编写 SSL 客户端和服务器密钥
【发布时间】:2023-03-31 23:43:02
【问题描述】:

我正在尝试将 SSL 主密钥和密钥从 chromium 浏览器导出/写入文件。如果有人可以建议我如何做到这一点,我将不胜感激。

要编写 premaster secret,我们可以简单地在环境中导出 SSLKEYLOGFILE 变量。 Wireshark 可以使用 premaster secret 来解密 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

查看上面的代码,我注意到可以设置更多的环境变量。有谁知道 SSLDEBUG 环境是否可以以与 SSLKEYLOG 变量相同的方式设置。任何其他方式或技术都会有所帮助

到目前为止,我还无法成功导出密钥。

【问题讨论】:

标签: google-chrome ssl https openssl wireshark


【解决方案1】:

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

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

从第 3179 - 3194 行将变量打印到文件中。 可以找到Client write key、Server write key、Client MAC key、Server MAC key、Cient IV和Server IV)

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

文件 *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 制作

sudo 安装

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2011-04-30
    • 2011-07-01
    相关资源
    最近更新 更多