HTTPS 协议是否与 REST API Web 服务相关


Is HTTPS protocol relevant for REST API Webservices?

我有一个iPhone应用程序使用的PHP中的HTTP REST API。

此 API 中的某些 Web 服务使用 HTTP 请求凭据中的用户身份验证进行保护,但我希望通过提供完全加密的请求数据来避免"中间人"攻击。

我对安全问题并不精通,我在任何地方都找不到任何明确的答案:

HTTPS 与无状态 REST API 相关吗?

据我了解,HTTPS做了两件事:

  • 加密您的会话
  • 向客户端证明他正在与之通信的服务器是安全的

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

有人可以跟我说清楚吗?

我的另一个解决方案是使用公钥/私钥系统加密请求数据。会更合适吗?

谢谢!

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

就像您使用VPN一样,您仍然可以拥有基于REST的应用程序。TLS 只是为每个连接自动设置和拆除隧道。

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

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

自己进行所有加密也可以是一种选择,但是您丢失了API易于使用的部分。

大多数针对"简单"HTTP请求的中间人攻击都涉及窃取凭据和伪造请求,但它们也可以读取发送和接收的数据。如果问题是数据不可读,请使用 HTTPS。如果虚假请求是唯一的问题,则像 OAuth 1(而不是 2)这样的身份验证协议就足够了。

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

如果数据是敏感的,一定要使用 HTTPS - 它会在传输层加密,这就是您正在寻找的。正如已经指出的那样,oAuth 2.0本质上是强制性的。您可以通过像 oAuth 1.0 中那样使用散列/签名来避免中间人,并避免使用 SSL,但正文仍然会明文显示(您避免以明文而不是正文发送 API 凭据)。