我们正在开发一个移动应用程序,通过SSL上的REST API与后端进行通信。移动设备对API调用执行证书验证(使用移动框架中的标准库)。如果我们尝试通过代理(例如Charles)连接移动设备,我们会看到所有流量,但它是加密的-正如预期的那样。但是,如果我启用SSL代理,生成根证书并在我设备上安装证书,我将通过Charles以明文形式查看所有数据-同样如预期的那样。
问题是,如何防止这种情况发生?当然,主要目标是仅当设备使用该服务器的有效证书调用允许的服务器时才公开数据。
发布于 2015-10-13 23:01:26
如果攻击者对设备具有该级别的访问权限,那么防止这种情况发生的唯一方法就是使用SSL拇指打印。您将启动到服务器的连接。检索SSL证书,并将其与应用程序代码中的硬编码值进行比较。如果不匹配,则中止连接并不发送数据。
然而,这样做的问题是,如果SSL更新,则会产生开销。您需要使用新的指纹值发布应用程序的更新。这也将阻止人们使用该应用程序,直到他们更新到最新版本。
发布于 2015-10-13 22:54:54
防止这种情况的唯一方法是通过certificate pinning,但是如果攻击者能够在您第一次连接到您的API之前安装根证书,那么您仍然可以是MiM'ed用户。
https://stackoverflow.com/questions/33113855
复制