我正在面临一个iOS应用程序的安全问题。我对所有网络调用使用HTTPS,使用的公共证书来自可信任的机构,并打包在应用程序中,以防止中间人攻击(参考资料:中间人攻击 - Wiki)。我在Android上进行了SSL Pinning(在每个网络调用之前/之中验证服务器的证书),它运行得非常完美,但是在iOS中,有一个TLS会话缓存,该缓存会在第一次网络调用后缓存证书有效性。
对于第一次网络调用,证书验证部分正常工作,而对于第二次调用,操作系统使用缓存,我无法进行证书验证。我的QA团队可以轻松攻击并获取第2次及连续网络调用的所有数据。这里是TLS Session Cache iOS文档 的引用。似乎没有办法通过编程方式清除缓存,参考:AdvancedURLConnections。
更改查询参数没有帮助,我已经尝试过了。请提供iOS特定的解决方案。出于业务原因,我无法对我的数据进行加密。
编辑: 我正在使用下面介绍的方法来验证我的证书。对于第一次网络调用,操作系统会调用此方法,而对于连续调用,此方法不会被调用。
willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
我的QA团队针对每次网络调用都进行了中间人攻击,他们尝试使用自己的证书,如果我没有验证证书,他们就可以轻松地读取数据。由于缓存的原因,我无法验证我的证书。