2015-10-13 132 views
1

我们正在研究一种通过SSL通过REST API与后端通信的移动应用程序。移动设备对API调用执行证书验证(使用移动框架中的标准库)。 如果我们尝试通过代理(如Charles)连接移动设备,我们会看到所有流量,但是它是加密的 - 正如预期的那样。 但是,如果我启用SSL代理,生成根证书并在设备上安装该证书,我将通过查尔斯以明文形式查看所有数据 - 如预期的那样。保护移动应用程序免遭中间人攻击

问题是,如何防止这种情况? 当然,主要目标是仅当设备调用允许服务器使用该服务器的有效证书时才公开数据。

回答

0

,以防止这种情况的唯一途径是通过certificate pinning,但如果攻击者能够安装之前您连接在第一次到你的API根证书,你仍然可以MiM'ed

+0

这是否意味着没有办法来防止这种情况?无论解决方案有多复杂。 –

+0

怎么会有?证书的信任链会告诉您是否信任您要连接的服务器。但是,如果有人能够在首次连接之前安装根证书,则无法确定信任链是否真实。 – MvdD

+0

对于能够修改设备上的根证书的人来说,他们已经拥有对设备的高级访问权限,并且如果他们真的想要,也可以在不考虑使用的SSL的情况下进行破坏。 – Peter

2

如果攻击者具有对设备的访问级别,则防止出现这种情况的唯一方法是使用SSL拇指打印。您将启动到服务器的连接。检索SSL证书并将其与应用程序代码中的硬编码值进行比较。如果这不匹配中止连接并且不发送数据。

但是,这个问题是SSL更新的开销。您需要以新的指纹值向应用程序发布更新。这也会阻止人们使用该应用,直到他们更新到最新版本。

相关问题