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