SSL 代理适用于除一个以外的所有应用程序

SSL Proxy works with all apps but one

我已经在我的主机上成功设置了 Charles 代理,这样当请求来自浏览器或大多数 android 应用程序时,我可以从我的 android 虚拟设备查看 SSL 流量虚拟设备。但是,我无法看到来自 one 个特定应用程序的 SSL 流量。当该应用发出 SSL 请求时,条目在 Charles 中显示为 "SSL Handshake: Received fatal alert: handshake_failure"

因为我可以拦截来自其他应用程序的 SSL 流量,所以我认为可能有问题的应用程序以某种方式忽略了用户接受的根证书。这可能吗?如果是这样,是否可以解决?

无法运行的应用可能在 SSL 握手期间使用了 public 密钥检查(也称为 public 密钥固定)。这是一种旨在防止 man-in-the-middle 攻击的安全机制。我认为在中间设置代理会改变握手期间传递给客户端的证书链,这就是它失败的原因。

如果您无法检查来自该应用程序的流量的原因确实是 Public 键固定 - 恐怕没有解决方法(至少在合理的投入时间内没有)。该应用需要一个您没有的特定 public 密钥。

关于 public 键固定的更多信息: https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning

希望对您有所帮助。