ssl - TLS/SSL 解密

标签 ssl https tls1.2

我需要解密应用程序通过 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/

相关文章:

python - python 中的 ssl 模块在 Windows 7 中不可用

java - 使用Java,需要通过代理建立https连接

ssl - 解释由 RFC6066 服务器名称指示定义的 SSL ClientHello SNI 消息扩展语法

java - 具有 TLS 的 REST 客户端返回 SSLHandshakeException : Received fatal alert: handshake_failure

asp.net - 如何陷阱 "cannot establish secure connection"

html - Magento 中的订单成功页面需要为 https ://and not www

Java 等效于使用 curl 命令行实用程序对带有证书的 https url 进行 rest 调用

asp.net - 浏览http和https时网站的外观差异

java - HTTPS - Spring Web Security - 如何确保服务器安全

security - 来自不安全 CDN 的 JS/CSS 行为