2012-04-08 139 views
1

我想保护我的iPhone客户端&服务器之间的通信。要做到这一点,我希望我的服务器只响应授权的客户端。所以,即使有人剽窃了沟通渠道,他也不应该能够创建一个能够让他从服务器获得正确响应的请求。基于客户端 - 服务器的iPhone应用程序中的通信安全

这里我的问题是,有没有哈希/加密 - 解密算法在JAVA &目标C之间共享,从某种意义上说,如果我使用私钥在iPhone客户端上使用某种算法在目标C中加密某些安全数据它可以在我的服务器上正确解密,这是基于JAVA的&,反之亦然。

任何合适的代码示例将非常有帮助。

+0

你考虑过HTTPS吗? – 2012-04-08 02:30:00

回答

2

为确保iOS通信的机密性,最简单(也是最安全)的方法是使用HTTPS与您的后端通话。 NSURLConnection直接支持这一点。开发自己的安全协议是一种众所周知的软件开发反模式(即采用不应该采用的设计模式)。

从您的问题来看,“授权客户”是指应用程序(即只有“官方”客户端应用程序可以与后端通话)还是用户,并不清楚。通过NSURLConnection中的认证支持,后者肯定会得到更好的支持。基本上,用户提供他的用户名和密码,并且这个信息被发送到每个请求的后端。用户的凭证可以缓存在钥匙串中。

通过HTTP客户端证书对客户端应用程序进行身份验证是可能的,但以安全方式实施可能会非常棘手。

+0

我仅使用HTTPS,但要加倍确定我想在从服务器响应之前授权客户端调用。另外,HTTPS/SSL也很脆弱。 – Abhinav 2012-04-09 03:36:23

+0

对于基本的HTTP身份验证,很多系统都非常好,具有HTTPS提供的数据(和凭据)的机密性。尽管所有系统都容易受到某些类型的攻击,但我认为您需要一个现实的威胁评估......您是否真的需要额外的保护?这些深奥的威胁有多大可能?请记住,您自己设计的任何安全协议几乎可以保证与经过验证的方法相比不太安全。 – 2012-04-09 15:37:56

1

验证客户端的低风险方法是使用共享密钥。客户端使用MD5或SHA1哈希对秘密的请求进行签名(两者都可以在Java或Objective C中使用)。服务器通过以相同的方式在请求上执行签名,然后将签名与客户端传递的签名进行比较来确认客户端的真实性。如果它们匹配,则服务器信任该请求。

+1

如果有人盗用n/w频道并发送相同的密钥会怎么样? – Abhinav 2012-04-09 03:34:31

+1

秘密不与消息一起发送,只是秘密生成的签名。服务器使用相同的(共享)秘密签署消息的清除部分。如果它可以生成相同的签名,则它信任发件人。这很容易受到黑客攻击,但更大的风险来自客户端的反编译,而不是传输中的任何内容。 – danh 2012-04-09 03:44:08

相关问题