【问题标题】:Is HTTPS protocol relevant for REST API Webservices?HTTPS 协议是否与 REST API Web 服务相关?
【发布时间】:2012-05-05 09:26:33
【问题描述】:

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

此 API 中的一些网络服务通过 HTTP 请求凭据中的用户身份验证进行保护,但我想通过提供完全加密的请求数据来避免“中间人”攻击。

我对安全问题不是很熟练,而且我在任何地方都找不到任何明确的答案:

HTTPS 是否与 STATELESS REST API 相关?

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

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

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

有人可以告诉我吗?

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

谢谢!

【问题讨论】:

  • HTTPS 做了两件事: - 加密连接 - 向客户端证明他正在与之交谈的服务器就是服务器所说的那个人
  • “我的另一个解决方案是使用公钥/私钥系统加密请求数据。”听起来是个不错的计划。为什么不实施 SSL (HTTPS) ;-)

标签: php api rest https


【解决方案1】:

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

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

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

【讨论】:

  • 不确定“自己进行所有加密”意味着什么,但这听起来是个坏主意。
  • @RepWhoringPeeHaa 如问题所述,我指的是使用公钥/私钥系统手动加密数据。
  • 啊哈。每当我听到有人建议尝试自己进行加密时,我都会很高兴。而且我不是在谈论投票触发快乐:)
  • @RepWhoringPeeHaa 我是 SSL 的忠实拥护者,但绝不会告诉任何人实现自己的加密层而不是使用 SSL。 另外,Apple 的 App Store 并不喜欢你构建自己的加密系统
  • 感谢大家的意见。我一定会先尝试 HTTPS。
【解决方案2】:

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

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

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

【讨论】:

  • 感谢 Will Hartung,您准确地解释了我不清楚的地方。我感觉 HTTPS 有状态部分可以在每个请求上重置,但我完全不确定。
  • REST 是无状态的,请求单独处理。所以添加 ssl 握手开销是个问题。有什么解决办法吗?
  • @S.M.Mousavi 如前所述,利用 HTTP(S) 的隧道方面。在这种情况下,您可以使用连接池来维护与服务器的开放连接。请务必定期刷新它们。
  • @WillHartung REST 设计为无状态,以便能够处理大型请求。但是如果必须处理打开的连接,服务器的资源将很快被使用。相反,作为一个基本思想,如果没有任何官方标准,我们可以使用初始协商来交换对称密钥。
  • @S.M.Mousavi 正如帖子所说,TLS 与 REST 的无状态特性无关,就像 VPN 对 REST 没有影响一样。开放式连接很便宜。您可以将 TLS 锚定在前端代理或负载均衡器上,并让它保持打开连接(成千上万个),以免影响您的后端服务器。我当然不会建议您按照您的建议实施您自己的加密协议。 TLS 的全部意义在于交换对称密钥,看看他们遇到的困难。
【解决方案3】:

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

【讨论】:

【解决方案4】:

如果数据是敏感的,请务必使用 HTTPS - 它会在您正在寻找的传输层进行加密。正如已经指出的那样,oAuth 2.0 本质上是强制要求的。您可以通过在 oAuth 1.0 中使用散列/签名来潜在地避免中间人,并避免必须使用 SSL,但那时正文仍然是明文的(您避免了明文发送 API 凭据,而不是正文)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 2012-12-06
    • 1970-01-01
    • 2013-05-08
    • 2013-07-12
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多