Python - Requests HTTP库SSL密钥

13
我正在使用requests库与https网站进行通信。这很好用,但我的唯一问题是wireshark不再在“Decrypted SSL Data”选项卡中捕获纯文本信息,就像按照此教程操作后那样:

https://jimshaver.net/2015/02/11/decrypting-tls-browser-traffic-with-wireshark-the-easy-way/

安装环境变量以使Chrome和Firefox将SSL密钥存储在文件中,Wireshark实时使用该文件。

是否有办法修改像这样的简单https请求脚本:

import requests
resp = requests.get("https://www.google.com", allow_redirects=True)

是否也可以像Chrome和Firefox一样,将SSL密钥存储到文件中?

根据我对OpenSSL实现的了解,要做类似的操作,必须在内存中查找主秘密和会话密钥 - 在从cmd运行时可行吗或者说实用吗?


请检查Selenium库。 - Parham sagharichi ha
2个回答

3
这似乎现在可以通过Requests实现。
我设置了SSLKEYLOGFILE=secrets.log,然后通过requests.get()运行了一个请求,secrets.log现在包含了TLS secrets。我使用的是requests v2.25.1和urllib3 v1.26.3。
显然,OpenSSL花费了一段时间提供提取密钥信息所需的API,然后创建pyOpenSSL中的绑定来利用这些API,再让它上升到urllib3。
有关更多详细信息,请参见此问题:https://github.com/psf/requests/issues/3674

谢谢,这看起来是非常有用的信息! - Dragon
适用于Python 3.9和requests 2.26.0,谢谢 :) - Bob
你在哪里设置SSLKEYLOGFILE=secrets.log?我的代码是 url = 'https://www.w3schools.com/python/demopage.php' myobj = {'somekey': 'somevalue'} x = requests.post(url, json = myobj) print(x.text)``` - GeorgeOfTheRF
你可以在系统环境变量中设置它,例如(在Linux上)export SSLKEYLOGFILE=secrets.log 在执行脚本之前,或者你可以在发出请求之前像这样在Python中设置它:import os; os.environ["SSLKEYLOGFILE"] = "secrets.log"。@GeorgeOfTheRF - dephekt

-3

openssl s_client -connect www.google.com:443 -showcerts

执行上述命令,您将看到 Google 网站使用的所有证书。


1
寻找私有会话密钥,而不是公共证书。 - gdw2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接