2012-04-24 99 views
3

我有一个iPhone应用程序使用PHP的HTTP REST API。HTTPS协议与REST API Webservices相关吗?

从这个API的一些Web服务被固定在HTTP请求凭据的用户身份验证,但我希望通过提供完全加密的请求数据,以避免“中间人”的攻击。

我不是很熟练的安全问题,我找不到任何明确的回答我的问题的任何地方:

是HTTPS相关的无状态REST API?

从我的理解,HTTPS做两件事情:

  • 加密会话
  • 证明给客户端,他所谈论到的服务器是安全

所以乍一看没有响应我的需要,即加密我的服务器和应用程序之间的数据,因为API不使用会话。但我仍然有疑问。

有人能告诉我吗?

我的其他解决方案将通过公钥/私钥系统来加密请求数据。它会更合适吗?

谢谢!

+0

HTTPS不两两件事: - 加密连接 - 证明给客户,他在谈论到服务器是谁的服务器说,他是< - 固定为您 – PeeHaa 2012-04-24 17:38:27

+1

“我其他的解决方案将通过加密数据的请求公钥/私钥系统“。听起来像一个很好的计划。为什么不实施SSL(HTTPS);-) – PeeHaa 2012-04-24 17:39:45

回答

2

是的。 HTTPS与应用程序无关,它是一种隧道协议。尽管TLS本身就是一种有状态协议,但HTTP部分却不是。

就像如果你使用的是VPN,你仍然可以拥有一个基于REST的应用程序。 TLS只需设置并自动为每个连接撕下隧道。

这就是说,有在利用HTTP流水线的各方面的价值和HTTPS以提高吞吐量超过TLS连接,但是这是一个性能优化方面无关的应用程序本身。

+0

Thanks Will Hartung,你解释了我到底不清楚什么。我感觉HTTPS有状态部分可以在每个请求上重置,但我完全不确定。 – Bedu33 2012-04-24 20:53:37

2

HTTPS是非常相关的,是的,这是因为你提到的两点。你知道吗OAuth 2实际上强制执行HTTPS?

做所有的加密自己可能是一种选择为好,但您失去API易于使用的部分。

大多数人在中间人的“简单”的HTTP请求攻击涉及窃取的凭证和伪造的请求,但他们也可以读取数据的发送和接收。如果您的问题与数据不可读,请使用HTTPS。如果假请求是唯一的问题,那么认证协议(如OAuth 1(不是2))就足够了。

+1

不确定你所说的“自己进行所有加密”的含义,但这听起来像个不好的主意。 – PeeHaa 2012-04-24 17:42:55

+0

@RepWhoringPeeHaa正如问题所述,我指的是用公钥/私钥系统手动加密数据。 – 2012-04-24 17:44:24

+0

啊哈。 Evertime我听到有人建议尝试自己做加密我倾向于触发快乐。而且我不是在谈论赞成票triggerhappy :) – PeeHaa 2012-04-24 17:45:32

0

如果你不想实现SSL,你可能想看看http://www.jcryption.org/我不知道它是否可以在无状态环境下工作,但可能值得一试。它基本上是一个jquery插件,负责为正在传输的数据创建密钥对关联。可能只能用于表单提交。我们曾经使用它来加密我公司的登录凭证。

+0

JavaScript加密通常是一个坏主意:http://www.matasano.com/articles/javascript-cryptography/ – Bruno 2012-04-24 23:48:48

0

肯定要用到,HTTPS如果数据是敏感的 - 它在加密是你在找什么传输层。正如已经指出的,oAuth 2.0基本上要求它。您可以通过在oAuth 1.0中使用散列/签名来避免中间人,并避免使用SSL,但是身体仍然清晰无误(您已经避免在明文中发送API凭证,而不是在主体中发送API凭证)。