https://en.m.wikipedia.org/wiki/HTTP/1.1_Upgrade_header
鉴于以下内容:
80
上连接Upgrade: TLS/1.x
Upgrade: h2c
或Upgrade: websocket
结果连接/协议是否仍在使用TLS,还是由不安全的替换?
注意:我不是主要寻找流行客户端/服务器的当前状态,而是寻找规范中可能导致更理想实现的任何提示。
答案 0 :(得分:0)
我不确定您的请求是否有意义,即使有,但是如果有任何实施可以支持它 - 或者您是否可以依赖可能的支持。
i = 0;
while (fscanf(sp_input, "%d", &test[i]) == 1) {
i = i + 1;
}
// Now, i is the number of items in the list, and test[0] .. test[i-1]
// are the items.
好的,这很好。它基本上会要求通过端口80和http来说TLS,并由RFC-2817定义。它非常不寻常,因为标准是仅通过https方案和端口443(或非标准端口,如8443)来讲TLS,但理论上这可行。另请注意,Connect on port 80
Request Upgrade: TLS/1.x
标头也必须设置为Connection
。
Upgrade
这是它开始变得棘手的地方。 h2c协议是一个不安全的HTTP / 2连接(即没有TLS),但是,与你的第一个标头相结合,你要求它超过TLS(通过HTTP btw允许多个标头)。我想,从理论上讲,这个可以工作,类似于它在上面的HTTP / 1.1下的工作方式,除了HTTP/2 spec明确指出:
" h2c"协议标识符描述了不使用TLS的协议。
和
通过TLS支持HTTP / 2的实现必须在TLS [TLS-ALPN]中使用协议协商。
因此,我认为上述连接违反规范并且未确认升级。
Connect on port 80
Request Upgrade: TLS/1.x
Request Upgrade: h2c
websocket spec对此不太清楚。它确实说明了:
默认情况下,WebSocket协议使用端口80进行常规WebSocket连接,将端口443用于通过传输层安全性(TLS)[RFC2818]进行隧道传输的WebSocket连接。
还有:
A | wss | URI标识WebSocket服务器和资源名称,并指示通过TLS保护该连接上的流量(包括TLS的标准优势,如数据机密性和完整性以及端点身份验证)。
然而,我无法看到禁止通过| ws |进行TLS连接URI,甚至使用| wss |端口80上的URI。但是我想,由于没有明确定义,因此不能保证这是否有效,或者连接是否安全。