【问题标题】:Validating an iOS app验证 iOS 应用程序
【发布时间】:2011-08-27 08:12:59
【问题描述】:

我们有一个 iOS 应用程序,它与后端的各种网络服务进行交互。然而,后端想要验证到达它的请求来自我们有效的 iOS 应用程序,而不是来自重放攻击或“中间人”攻击。我们最终会将所有调用更改为 https。但是,后端有什么方法可以验证请求来自我们的合法应用程序吗?我们正在考虑对每个请求使用加密随机数,但它仍然容易受到“中间人”攻击。 iOS 应用和服务器之间是否可以使用任何证书交换?

【问题讨论】:

    标签: iphone ipad validation certificate


    【解决方案1】:

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

    如果私钥/公钥方案听起来很吓人,那么通过使用sha1sha2 或其他加密散列算法对您的加密随机数进行散列,可以轻松实现“签名”您的请求的相同想法。这将很容易实现(实现很容易),速度快,并且可以确保更高的安全级别。

    【讨论】:

      【解决方案2】:

      我建议使用 OAuth。它众所周知、易于理解且非常安全,如果有人获得了您的令牌,您可以通过应用更新发布一个新令牌并撤销旧令牌。

      【讨论】:

        【解决方案3】:

        TLS 和 SSL 支持 client authentication 使用证书。 NSStream 可能支持客户端身份验证,但我一直无法找到一种方法来做到这一点,而无需直接使用 OpenSSL 进行实际实现。

        补充:
        ASIHTTPRequest 从 1.8 版本开始支持 client certificates,因此无需大惊小怪。

        【讨论】:

        • 我在上学期为一所学校project 实施了这个(可能是半断的)。主要感兴趣的部分是 PXConnectionPXClient 类。
        【解决方案4】:

        这是一般的 http 问题,而不仅仅是 iOS 问题。事实上,这正是 https 旨在解决或至少缓解的问题。您可以对请求进行签名、使用 HMAC 对消息进行身份验证、使用摘要式身份验证等,但只要您使用的是 http,就不容易检测到中间人攻击。尽可能快地花时间转移到 https。

        【讨论】:

          【解决方案5】:

          这个问题不可能绝对解决。通过越狱手机并在调试器中运行客户端,您放入方案中的任何内容最终都会被破坏。当然,这并不意味着您不能使用客户端证书等来欺骗您的客户端变得更加困难,您应该这样做。但是,例如,如果金融交易的安全性取决于您的应用不可被欺骗,那就太糟糕了...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-24
            • 2015-05-03
            • 1970-01-01
            相关资源
            最近更新 更多