【问题标题】:TLS/SSL decryptingTLS/SSL 解密
【发布时间】:2018-12-31 11:59:49
【问题描述】:

我需要解密应用程序通过 HTTPS 协议发送的请求。 据我了解,我需要做类似 MITM 攻击的事情。 我为此使用了 Charles 和 Fiddler,但用于解密来自浏览器的 HTTPS 请求,例如Firefox 我需要在其中制作 Charles 的可信证书。但是如何使用我无法使我的证书受信任的应用程序来做到这一点?有什么方法可以在全球范围内为操作系统执行此操作吗?

【问题讨论】:

  • 这取决于应用程序。编写良好的应用程序使用一种称为证书固定的技术——它们不依赖操作系统来决定信任哪些证书。

标签: ssl https tls1.2


【解决方案1】:

客户端通过连接协议版本(2 个字节)和客户端随机生成的一些字节(46 个字节)来生成 48 字节的 premaster secret。客户端应该从操作系统提供的 PRNG (/dev/urandom, CryptGenRandom()...) 中获取这 46 个字节。

基本上在问候和决定密码之后,说他们同意 RSA 密钥协议。

然后,客户端使用服务器的 RSA 公钥(服务器先前在证书消息中发送给客户端的密钥)加密 48 字节的 premaster secret。加密后的结果是客户端作为 ClientKeyExchange 消息发送给服务器的。

服务器使用其密钥解密消息并获得预主密钥。

假设您控制服务器并拥有证书/私钥 - 在我看来,Charles Proxy 不支持这一点。但 mitmproxy 支持为特定域提供固定证书。

如前所述,其他一些应用程序(大多数不使用)使用证书固定,您需要修补(或破解)应用程序代码来禁用它,这是一个答案: Charles Proxy for Mobile apps that use SSL Pinning.

一些库将生成的 PSK(预主密钥)记录到环境变量 ex. 中定义的文件中。 ( export SSLKEYLOGFILE=~/.ssl-key.log ),但我不确定 Android 的情况。

底线;没有通用的方法可以做到这一点,这取决于很多事情。

【讨论】:

    猜你喜欢
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多