我已经在我的主机上成功设置了 Charles 代理,这样当请求来自浏览器或虚拟设备上的大多数 Android 应用时,我可以查看来 self 的 Android 虚拟设备的 SSL 流量。但是,我无法看到来自一个 特定应用程序的 SSL 流量。当该应用发出 SSL 请求时,条目在 Charles 中显示为“SSL 握手:收到致命警报:handshake_failure”
因为我可以拦截来自其他应用程序的 SSL 流量,所以我认为可能有问题的应用程序以某种方式忽略了用户接受的根证书。这可能吗?如果是这样,是否可以解决?
最佳答案
无法运行的应用可能在 SSL 握手期间使用了公钥检查(也称为公钥固定)。这是一种旨在防止中间人攻击的安全机制。我认为在中间设置代理会改变握手期间传递给客户端的证书链,这就是它失败的原因。
如果您无法检查来自此应用程序的流量的原因确实是公钥固定 - 恐怕没有解决方法(至少在合理的投入时间内没有)。该应用需要一个您没有的特定公钥。
关于公钥固定的更多信息: https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning
希望对您有所帮助。
关于android - SSL 代理适用于除一个以外的所有应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843919/