Apache om Debian 9 (Stretch) 使用 OpenSSL 1.0.2(请参阅apache2-bin对libssl1.0的依赖),因此您可以使用该链接帖子中记录的方法。您可以修改启动脚本以导出LD_PRELOAD=/path/to/libsslkeylog.so
和SSLKEYLOGFILE=/tmp/your.keys
.
如何做到这一点取决于应用程序。对于 systemd,您可以尝试systemctl edit apache2
创建一个覆盖。如果还是像 Apache 这样经典的 sysvinit init 脚本,尝试/etc/init.d/apache2
用上面两个环境变量修改。不要忘记export
关键字。 Apache 似乎不再使用 sysvinit 脚本,因此您必须修改 systemd 单元文件。
这将导致主密钥写入 SSLKEYLOGFILE 环境变量指定的文件。它不完全是 premaster secret,但您可以使用它在 Wireshark 中启用解密。有关后者的更多详细信息,另请参阅https://wiki.wireshark.org/TLS
根据您的用例,跳过服务器的修改并在客户端点击键可能更容易。Firefox 和 Chromium 具有对 SSLKEYLOGFILE 环境变量的内置支持。较新版本的 curl 也支持这一点,但较旧版本的 curl 或其他使用 OpenSSL 的应用程序需要类似上述 sslkeylog.sh 方法。
演练
该sslkeylog.so
库特定于 OpenSSL 版本。版本 1.0.2( Debian Stretch 中的libssl1.0.2 )与 OpenSSL 1.1.0(Debian Stretch 中的libssl1.1)不兼容。为了构建库,您需要相应的开发头文件。这些可通过相应版本的libssl1.0-dev或libssl-dev包获得。
获取源代码和构建库应该很简单:
sudo apt install git make gcc libssl1.0-dev
git clone --depth=1 https://git.lekensteyn.nl/peter/wireshark-notes
cd wireshark-notes/src
make
# Optional: install to a specific location. Adjust paths below if you skip this.
sudo install libsslkeylog.so /usr/local/lib/
这会libsslkeylog.so
在您的当前目录中生成一个文件。要测试它是否有效:
$ ./sslkeylog.sh curl https://example.com -sI
CLIENT_RANDOM ... ... <-- expected for TLS 1.2
HTTP/2 200
...
$ ldd /usr/bin/curl | grep ssl
libssl.so.1.0.2 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 (0x00007fc5a088d000)
最后一个命令显示程序链接到的 libssl 版本。我们可以为 Apache 做类似的事情。主程序(apache2)通过不同的库加载 TLS 支持,所以我们必须检查:
$ ldd /usr/lib/apache2/modules/mod_ssl.so | grep ssl
libssl.so.1.0.2 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 (0x00007f8dbb6ed000)
如果这显示 libssl.so.1.1 出于某种原因,那么您将不得不sudo apt install libssl-dev
改为使用make -B
.
下一步是修改apache2
服务的 systemd 单元文件。Execute systemctl edit apache2
,这会打开一个编辑器/etc/systemd/system/apache2.service.d/override.conf
,您应该在其中添加:
[Service]
Environment=LD_PRELOAD=/usr/local/lib/libsslkeylog.so
Environment=SSLKEYLOGFILE=/tmp/your.keys
重新启动 ( sudo systemctl restart apache2
) 后,您的密钥现在将在/tmp/systemd-private-*-apache2.service-*/tmp/your.keys
. 如果您想要更短的路径,您可以输入类似 的内容/home/user/your.keys
,但请确保该文件可由www-data
用户写入。
确保在测试完成后将其删除。我建议临时修改客户端来执行这种测试。如上所示,sslkeylog.sh
也适用于客户端。