我需要解密应用程序通过 HTTPS 协议(protocol)发送的请求。 据我了解,我需要像 MITM 攻击那样做。 我为此使用了 Charles 和 Fiddler,但用于解密来自浏览器的 HTTPS 请求,例如Firefox 我需要在其中制作 Charles 的可信证书。但是如何在我无法信任我的证书的应用程序中做到这一点?有什么方法可以在全局范围内为操作系统执行此操作?
最佳答案
客户端通过连接协议(protocol)版本(2 字节)和客户端随机生成的一些字节(46 字节)来生成 48 字节的预主 key 。客户端应该从操作系统提供的 PRNG 中获取这 46 个字节(/dev/urandom,CryptGenRandom()...)。
基本上在打招呼和决定密码之后,说他们同意 RSA key 协议(protocol)。
然后客户端使用服务器的 RSA 公钥(服务器之前在证书消息中发送给客户端的 key )加密 48 字节的预主 key 。加密后的结果是客户端作为 ClientKeyExchange 消息发送给服务器的。
服务器使用它的 secret key 来解密消息并获得预主 secret 。
如果您控制服务器并拥有证书/私钥 - 在我看来 Charles Proxy 不支持此功能。但 mitmproxy 支持为特定域提供固定证书。
否则,如前所述,一些应用程序(大多数不使用)使用证书固定,您需要修补(或破解)应用程序代码以禁用它,这是一个答案: Charles Proxy for Mobile apps that use SSL Pinning .
一些库将生成的 PSK(预主 key )记录到在环境变量 ex 中定义的文件中。 ( export SSLKEYLOGFILE=~/.ssl-key.log ),但我不确定 Android 是否如此。
底线;没有通用的方法可以做到这一点,这取决于很多因素。
关于ssl - TLS/SSL 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488859/