打开 Firefox 或 Chrome 以写入 SSLKEYLOGFILE

BEW*_*ARB 4 encryption firefox google-chrome ssl wireshark

我使用以下命令导出了一个新的用户变量 SSLKEYLOGFILE:

export SSLKEYLOGFILE=($HOME)/sslkeylog.log
Run Code Online (Sandbox Code Playgroud)

如果我正常打开 Firefox 或 Chrome,则不会 创建sslkeylog.log文件(即使创建,即使我通过浏览器浏览 ssl 流量也是空的)。是否有特殊的终端命令可以打开启用了这些功能的浏览器?如果是,那是什么?

dan*_*zel 9

省略括号

如果export在命令后执行(不带参数),您将看到它SSLKEYLOGFILE设置为(/home/username)/sslkeylog.log,这不是有效路径。省略括号:

export SSLKEYLOGFILE=$HOME/sslkeylog.log
Run Code Online (Sandbox Code Playgroud)

“正常”打开的应用程序仍然看不到环境变量

根据Bash 参考手册

export [-fn] [-p] [name[=value]]

Mark each name to be passed to child processes in the
environment.[...]
Run Code Online (Sandbox Code Playgroud)

...以及类似的破折号手册

 export name ...
 export -p
        The specified names are exported so that they will appear in the
        environment of subsequent commands.[...]
Run Code Online (Sandbox Code Playgroud)

...导出的环境变量只会传递给同一进程或子进程中的后续命令。因此,如果您打开终端并执行export SSLKEYLOGFILE...命令,则只有从同一终端(或更准确地说,该终端内的同一 shell 进程)产生的应用程序(进程)才会看到环境变量。如果您google-chrome(-stable) 从该终端运行,它将看到SSLKEYLOGFILE变量并写入指定的文件。

如果您通过应用程序启动程序(我假设您认为是正常的)打开 google chrome ,它将不是终端的子进程,因此不会知道该SSLKEYLOGFILE变量。

另请注意,如果 chrome 已在运行,则google-chrome-stable在终端中执行将在已运行的进程中打开一个新窗口。您可以通过pstree在终端中执行来查看进程树。

由于这不是问题的一部分,我不会在这里详细介绍,但是在Ubuntu 社区 wiki 中解释了设置会话范围或系统范围的持久环境变量


Mar*_*ark 5

我想与其他人分享,上面提到的解决方案在使用 chrome 的 ubuntu 18.10 上对我有用

你可以从终端启动一个站点,使用

$ google-chrome https://askubuntu.com/questions
Run Code Online (Sandbox Code Playgroud)

对我来说,我想在wireshark中阅读tcp对话。

密钥日志可以由 NSS 写入,以便外部程序可以解密 TLS 连接。Wireshark 1.6.0 及以上版本可以使用这些日志文件来解密数据包。您可以通过 Edit?Preferences?Protocols?SSL?(Pre)-Master-Secret 日志文件名告诉 Wireshark 在哪里可以找到密钥文件。

请注意,我没有尝试过 Firefox。它可能有效,但我不想花时间弄清楚。mozilla 指出 debian 默认禁用 https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format

由于我是新成员,论坛不会让我对解决方案进行投票。

编辑:在wireshark v3.2.7(2021年2月供参考)中,协议列表中不再有“SSL”选项。改用“TLS”