【问题标题】:Should Upgrade: TLS followed by Upgrade: h2c/websocket on port 80 still be secure?升级:TLS 后跟升级:端口 80 上的 h2c/websocket 是否仍然安全?
【发布时间】:2017-09-09 06:50:47
【问题描述】:

https://en.m.wikipedia.org/wiki/HTTP/1.1_Upgrade_header

鉴于以下情况:

  • 连接端口80
  • 请求Upgrade: TLS/1.x
  • 请求Upgrade: h2cUpgrade: websocket

生成的连接/协议是否仍会使用 TLS,还是会被不安全的替换

注意:我主要不是在寻找流行的客户端/服务器的当前状态,而是在规范中可能导致更理想的实现的任何提示。

【问题讨论】:

    标签: http ssl websocket http2


    【解决方案1】:

    我不确定您的请求是否有意义,即使确实如此,是否有任何实现会支持它 - 或者您是否可以依赖可能的支持。

    Connect on port 80
    Request Upgrade: TLS/1.x
    

    好的,这有点好。它基本上会要求通过端口 80 和 http 使用 TLS,并由 RFC-2817 定义。这是非常不寻常的,因为标准是仅通过 https 方案和端口 443(或像 8443 这样的非标准端口)使用 TLS,但理论上这会起作用。另请注意,Connection 标头也必须设置为 Upgrade

    Connect on port 80
    Request Upgrade: TLS/1.x
    Request Upgrade: h2c
    

    这是开始变得棘手的地方。 h2c 协议是一个不安全的 HTTP/2 连接(即没有 TLS),但是结合您的第一个标头,您要求它通过 TLS(顺便说一句,允许多个标头通过 HTTP)。我想,理论上,这可以工作,类似于它在上面的 HTTP/1.1 下的工作方式,除了 HTTP/2 spec 明确指出:

    “h2c”协议标识符描述了不使用 TLS 的协议。

    支持 HTTP/2 over TLS 的实现必须在 TLS [TLS-ALPN] 中使用协议协商。

    因此,我认为上述连接违反了规范,因此不确认升级。

    Connect on port 80
    Request Upgrade: TLS/1.x
    Request Upgrade: websocket
    

    websocket spec 对此不太清楚。它确实声明:

    默认情况下,WebSocket 协议使用端口 80 进行常规 WebSocket 连接,端口 443 用于通过传输层安全 (TLS) [RFC2818] 隧道传输的 WebSocket 连接。

    还有:

    一个 |wss| URI 标识 WebSocket 服务器和资源名称,并指示通过该连接的流量将通过 TLS 进行保护(包括 TLS 的标准优势,例如数据机密性和完整性以及端点身份验证)。

    但是,我看不到任何内容禁止通过 |ws| 进行 TLS 连接。 URI,甚至使用 |wss| URI 通过端口 80。但是我想,由于没有明确定义,因此无法保证这是否有效,或者连接是否安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      相关资源
      最近更新 更多