TLS/SSL解密

3

我需要解密应用程序发送的HTTPS协议请求。据我所知,我需要做类似于中间人攻击(MITM)的事情。 我已经使用了Charles和Fiddler进行此操作,但是对于从浏览器(如Firefox)解密HTTPS请求,我需要将Charles的证书设置为受信任的证书。但是在应用程序中,我无法使自己的证书受信任,有没有一种在全局操作系统中实现这一点的方法?


这取决于应用程序。编写良好的应用程序使用一种称为证书固定的技术——它们不依赖操作系统来决定信任哪些证书。 - President James K. Polk
1个回答

0
客户端通过连接协议版本(2个字节)和客户端随机生成的一些字节(46个字节)来生成48字节的预主密钥。客户端应该从操作系统提供的 PRNG(/dev/urandom、CryptGenRandom() 等)中获取这 46 个字节。
基本上,在完成握手并决定密码后,假设他们同意使用 RSA 密钥协商。
然后,客户端使用服务器之前发送给客户端的 RSA 公钥(在证书消息中)加密 48 字节的预主密钥。加密结果是客户端作为 ClientKeyExchange 消息发送到服务器的内容。
服务器使用其秘密密钥解密消息并获取预主密钥。
如果你控制服务器并拥有证书/私钥,则看起来 Charles Proxy 不支持此功能。但 mitmproxy 支持为特定域提供固定证书。
否则,如上所述,一些应用程序(大多数不会)使用证书固定,您需要修补(或破解)应用程序代码以禁用它,这里有一个答案:Charles Proxy for Mobile apps that use SSL Pinning

一些库将生成的PSK(预主密钥)记录到一个在环境变量中定义的文件中,例如(export SSLKEYLOGFILE =〜/ .ssl-key.log),但我不确定Android是否也是如此。

总之,没有通用的方法来做到这一点,这取决于很多因素。


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