web隧道

2022-11-16 14:05:39 浏览数 (1)

web隧道

web隧道可以让 HTTP 应用程序访问使用非 HTTP 协议的应用程序。Web 隧道允许用户通过 HTTP 连接发送非 HTTP 流量,这样就可以在 HTTP 上捎带其他协议数据了。使用 Web 隧道最常见的原因就是要在 HTTP 连接中嵌入非 HTTP流量,这样,这类流量就可以穿过只允许 Web 流量通过的防火墙了。

CONNECT方法建立HTTP隧道

Web 隧道是用 HTTP 的 CONNECT 方法建立起来的。CONNECT方法并不是HTTP/1.1 核心规范的一部分( HTTP/1.1 规范保留了 CONNECT 方法,但没有对其功能进行描述。),但却是一种得到广泛应用的扩展。CONNECT 方法请求隧道网关创建一条到达任意目的服务器和端口的 TCP 连接,并对客户端和服务器之间的后继数据进行盲转发。

其中的 SSL 流量是在一条 HTTP 连接上发送的,但是通过 CONNECT 方法可以与使用任意协议(基于TCP的协议)的任意服务器建立 TCP 连接的。

管道化数据对网关是不透明的,所以网关不能对分组的顺序和分组流作任何假设。一旦隧道建立起来了,数据就可以在任意时间流向任意方向了。作为一种性能优化方法,允许客户端在发送了 CONNECT 请求之后,接收响应之前,发送隧道数据。这样可以更快地将数据发送给服务器,但这就意味着网关必须能够正确处理跟在请求之后的数据。尤其是,网关不能假设网络 I/O 请求只会返回首部数据,网关必须确保在连接准备就绪时,将与首部一同读进来的数据发送给服务器。在请求之后以管道方式发送数据的客户端,如果发现回送的响应是认证请求, 或者其他非 200 但不致命的错误状态,就必须做好重发请求数据的准备。(传送的数据不要超过请求 TCP 分组的剩余容量。如果在收到所有管道化传输的 TCP 分组之前,网关关闭了连接,那么,管道化传输的多余数据就会使客户端 TCP 重置。TCP 重置会使客户端丢失收到的网关响应,这样客户端就无法分辨错误是由于网络错误、访问控制,还是认证请求造成的了。)

如果在任意时刻,隧道的任意一个端点断开了连接,那个端点发出的所有未传输数据都会被传送给另一个端点,之后,到另一个端点的连接也会被代理终止。如果还有数据要传输给关闭连接的端点,数据会被丢弃。

SSL隧道

最初开发 Web 隧道是为了通过防火墙来传输加密的 SSL 流量。很多组织都会将所有流量通过分组过滤路由器和代理服务器以隧道方式传输,以提升安全性。但有些协议,比如加密 SSL,其信息是加密的,无法通过传统的代理服务器转发。隧道会通过一条 HTTP 连接来传输 SSL 流量,以穿过端口 80 的 HTTP 防火墙

通常会用隧道将非 HTTP 流量传过端口过滤防火墙。这一点可以得到很好的利用,比如,通过防火墙传输安全 SSL 流量。但是,这项特性可能会被滥用,使得恶意协议通过 HTTP 隧道流入某个组织内部。

对于 SSL 隧道机制来说,无需在代理中实现 SSL。SSL 会话是建立在产生请求的客户端和目的(安全的)Web 服务器之间的,中间的代理服务器只是将加密数据经过隧道传输,并不会在安全事务中扮演其他的角色。

隧道认证

在适当的情况下,也可以将 HTTP 的其他特性与隧道配合使用。尤其是,可以将代理的认证支持与隧道配合使用,对客户端使用隧道的权利进行认证。

隧道的安全性考虑

总的来说,隧道网关无法验证目前使用的协议是否就是它原本打算经过隧道传输的协议。因此使用隧道的时候要格外小心。

参考资料

《HTTP权威指南》

0 人点赞