解密由于 JMeter https 请求而生成的“加密警报”数据包(例如,通过 Wireshark)

Posted

技术标签:

【中文标题】解密由于 JMeter https 请求而生成的“加密警报”数据包(例如,通过 Wireshark)【英文标题】:decrypt `Encrypted Alert` packets generated due to JMeter https requests (e.g. via Wireshark) 【发布时间】:2020-03-07 22:10:11 【问题描述】:

我按照该指南 https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/ 设置 Wireshark 以解密 TLS 流量。

我在 MacOS 上将 export SSLKEYLOGFILE=~/.ssl-key.log 添加到 ~/.bash_profile,现在当我从同一终端窗口 open -a firefox 启动像 Firefox 这样的浏览器时,我看到 ssl-key.log 文件的大小变大了。但是,当我也从同一个终端窗口启动JMeter 并使用https 协议运行多个http samplers 时,ssl-key.log 没有增长。

我无法通过网络搜索 tls wireshark decrypt jmeter 找到有关该主题的信息。如何解密?我不仅需要与 JMeter 中的 View Results Tree 等捕获的请求相匹配的响应,还需要技术数据包,特别是 Encrypted Alert 的数据包。

【问题讨论】:

【参考方案1】:

JMeter 对这个 SSLKEYLOGFILE 环境变量一无所知,如果您想通过 Wireshark 捕获源自 JMeter 的加密流量,您需要使用 RSA key approach

首先你需要get the private key from the website you're testing。

完成后,您需要在 Wireshark - Preferences - Protocols - TLS 中使用上述私钥配置协议解析器

完成后,您应该能够使用 Wireshark 解密传出请求。


如果您无法从您正在测试的网站获取 RSA 私钥,您仍然可以尝试使用 JMeter 的HTTP(S) Test Script Recorder 获取它,您需要首先生成 MITM 代理密钥库并通过修改以下内容让 JMeter 知道此密钥库JMeter Properties:

proxy.cert.file=proxyserver.jks
proxy.cert.type=JKS
proxy.cert.keystorepass=mc3VZAuZvgYzt6pIQq3w
proxy.cert.keypassword=BFsghQ0GBN7SxI0HWpkr

然后你需要通过 keytool 命令将 JKS 密钥库转换为 PKCS12

keytool -importkeystore -srckeystore proxyserver.jks -destkeystore proxyserver.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass mc3VZAuZvgYzt6pIQq3w -deststorepass mc3VZAuZvgYzt6pIQq3w

接下来可以extract encrypted RSA private key from the .p12 keystore:

openssl pkcs12 -in proxyserver.p12 -nocerts -out encrypted.key -password pass:mc3VZAuZvgYzt6pIQq3w -passout pass:mc3VZAuZvgYzt6pIQq3w

最后解密私钥以供以后在 Wireshark 中使用:

openssl rsa -in encrypted.key -out decrypted.key -passin pass:mc3VZAuZvgYzt6pIQq3w

生成的 RSA 密钥文件可以在 Wireshark 中使用

【讨论】:

德米特里,谢谢。我对密码学不太感兴趣,也许您可​​以澄清一下:1)您的方式是否使会话使用带有许多随机密钥的单个 RSA 无前向保密? 2)如果是(1)让JMeter了解SSLKEYLOGFILE并以与浏览器相同的方式使用它(可能通过更改HTTP采样器的源代码......)需要多长时间?

以上是关于解密由于 JMeter https 请求而生成的“加密警报”数据包(例如,通过 Wireshark)的主要内容,如果未能解决你的问题,请参考以下文章

转载JMeter学习(三十六)发送HTTPS请求

JMeter学习(三十六)发送HTTPS请求(转载)

iis 配置多域名,多https

jmeter 请求发送加密参数(加密接口测试一)

JMeter请求数据BASE64加密

JMeter BeanShell 实现接口签名验签及加解密