2011-05-17 161 views
6

我们有一个iOS应用程序,它与后端的各种Web服务交互。然而,后端想要验证来自它的请求来自我们有效的iOS应用程序,而不是来自重播攻击或“中间人”攻击。我们最终会将所有通话都改为https。但是,有没有办法后端可以验证请求来自我们的合法应用程序?我们正在考虑对每个请求使用加密随机数,但它仍然容易出现“中间人”攻击。有没有可以在iOS应用程序和服务器之间使用的证书交换?验证iOS应用程序

回答

3

如何使用私钥/公钥方案,以便iOS应用可以签署它发送的每个请求?

如果私钥/公钥模式听起来可怕,那么通过使用sha1,sha2或其他加密哈希算法对您的加密随机数进行哈希处理,可以轻松实现“签名”您的请求的相同想法。这很容易实现(实现很容易获得),速度很快,并且可以确保更高的安全级别。

1

我会建议使用OAuth。它是众所周知和理解的,并且非常安全,并且在有人获得您的令牌的情况下,您可以使用应用更新发布新消息并撤销旧消息。

3

使用证书的TLS和SSL支持client authentication。 NSStream 可能支持客户端认证,但我一直没有找到办法做到这一点,而不必放弃使用OpenSSL的实际实施。

增加:
ASIHTTPRequest支持client certificates从版本1.8开始,所以在实现它时不要大惊小怪。

+0

我实施了(可能以一种破半裂的方式)这是一个学校[项目](https:// github.com/paxswill/SecureGateway)上学期。感兴趣的主要部分是[PXConnection](https://github.com/paxswill/SecureGateway/blob/master/SStore/Source/PXConnection.h)和[PXClient](https://github.com/paxswill) /SecureGateway/blob/master/AppGate/Source/PXClient.m)类。 – 2011-05-17 15:44:06

1

这是一个普通的http问题,不仅仅是一个iOS问题。实际上,这是https设计要解决的问题,或者至少是缓解问题。您可以对请求进行签名,使用HMAC对消息进行身份验证,使用摘要式身份验证等,但只要您使用http,就不能轻易检测到中间人攻击。花时间尽可能快地转向https。

0

这个问题是绝对不可能解决的。任何你放入你的方案的东西最终都可以通过越狱手机和在调试器中运行客户端来破解。当然,这并不意味着你不能使用客户端证书欺骗你的客户变得更加困难,而且你也应该这样做。但是,如果例如金融交易的安全取决于您的应用程序不可欺骗,那将是不好的...