【问题标题】:Are REST request headers encrypted by SSL?REST 请求标头是否由 SSL 加密?
【发布时间】:2010-09-09 13:37:21
【问题描述】:

我正在开发一个客户端/服务器应用程序,它将通过休息进行通信。一些自定义请求数据将存储在请求的标头中。发送请求的服务器和接收服务器都有 SSL 证书 - 标头会被加密,还是只是内容?

【问题讨论】:

    标签: web-services http rest ssl


    【解决方案1】:

    SSL 加密从客户端到服务器并返回的整个通信路径,所以是的 - 标头将被加密。

    顺便说一句,如果您开发网络应用程序并关心数据安全,那么您至少应该阅读 Niels Ferguson 和 Bruce Schneier 所著的《实用密码学》之类的书,并且可能进一步阅读更侧重于 Web 应用程序安全性的书是个好主意。如果我可以进行观察 - 请注意,我并不是说作为个人批评 - 你的问题表明对非常基本的网络安全技术缺乏了解,这绝不是一个好兆头。

    此外,确认假定已加密的数据确实已加密绝不是一个坏主意。您可以使用网络分析器来监控网络上的流量,并注意任何敏感的信息以明文形式发送。我以前使用过 Wireshark 来执行此操作 - 有时结果可能会令人惊讶。

    【讨论】:

    • 谢谢,非常感谢。我对答案很有信心,但在我们开始开发之前必须确认这一点(对于现有的权力)。干杯!
    • "SSL 加密整个通信路径" ... 除了 IP 和 TCP 标头。
    【解决方案2】:

    只要您在 SSL 隧道中进行通信,服务器和客户端之间发送的所有内容都会被加密。在发送或接收任何数据之前完成加密。

    【讨论】:

      【解决方案3】:

      标头和内容均已加密。

      【讨论】:

        【解决方案4】:

        您似乎认为 REST 是一种独特的协议。

        REST 不是协议。它是一种基于 HTTP 的应用程序的设计风格。

        所以,您正在编写一个 HTTP 应用程序。标头是否加密?是的,如果您使用的是 HTTPS(基于 SSL 的 HTTP)协议而不是普通 HTTP。

        双方都有证书与您的问题没有直接关系。 SSL 证书用于身份验证。它们有助于检测中间人攻击,例如可能使用 DNS 缓存中毒。

        【讨论】:

        • 谢谢,但我知道 REST 是一种方法而非协议。
        【解决方案5】:

        拥有证书是不够的,您必须配置 Web 服务器以加密该域或虚拟主机的连接(即使用证书)。此外,我认为您只需要一个证书,对请求的响应仍将被加密。

        是的,HTTP 标头和数据一样被加密。

        【讨论】:

          【解决方案6】:

          其他答案是正确的,即在使用 SSL 时,标头确实与正文一起加密。但请记住,可能包含查询参数的 URL 是从不加密的。所以请注意不要在 URL 查询参数中放入任何敏感信息。

          更新: 正如@blowdart 在下面指出的那样,这是错误的。请参阅下面的评论。

          【讨论】:

          • 不,不完全正确。查询参数在握手后发送,因此被加密; SSL 专门剥离它们并将它们作为页面块的一部分发送。
          • @blowdart - 非常正确,但浏览器仍会在其历史记录中捕获查询字符串。所以最好不要在查询字符串中使用敏感信息。
          • 我已经确认@blowdart 是正确的;我的回答错了。
          • @Avi:我认为你应该编辑你的答案以反映你的“最新知识”,即你错了,而不是评论它。只是我的 2 美分 :)
          【解决方案7】:

          SSL..或者更确切地说是 HTTPS(HTTP over SSL)通过 SSL 发送所有 HTTP 内容,并且由于 HTTP 内容和标头实际上是相同的,这意味着标头也被加密了。 看到 GET 和 POST 数据是通过 HTTP 标头发送的,那么只有在安全发送数据时才有意义,您不仅希望响应代码或内容被加密。

          【讨论】:

          • HTTP content 和 headers 不是一回事,POST 数据不是通过 HTTP headers 发送的,而是在请求体中发送的。
          • Wesley 给出的信息不正确。 POST 将数据放入消息正文中。
          【解决方案8】:

          并非所有内容都已加密:请求查询字符串未加密。相信我,我见过这样的请求:

          https://mydomain.com/authenticate?user=username&password=MyStrongPasswordSentInTheClear

          请不要将敏感数据作为参数放入查询字符串中。

          【讨论】:

          • 即使查询受到浏览器和服务器之间的 SSL/TLS 保护。
          • 不正确。 mydomain.com 之后的所有内容都通过HTTP GET/POST/etc. 请求内的线路发送,因此已加密。然而,URL 字符串本身通常会在并行逻辑路径中泄漏,例如在浏览器历史记录、日志、保存的链接、收藏夹、工具栏、服务器日志中;可能是最糟糕的 - 在一些网络分析参考中。由于最初的问题是关于 REST 的,因此其中许多是无关紧要的。不管是什么,作为最佳实践,我个人的经验法则是:“不要将敏感数据(密码、PII、DB ID)放在 URL 中。”
          猜你喜欢
          • 1970-01-01
          • 2010-09-16
          • 2020-02-21
          • 2012-11-06
          • 1970-01-01
          • 1970-01-01
          • 2020-05-06
          • 2011-07-03
          • 2016-03-24
          相关资源
          最近更新 更多