apache - 通过 HTTPS 的隧道

标签 apache proxy https ssh tunnel

在我的工作场所,流量拦截器/防火墙变得越来越糟糕。我无法通过端口 22 连接到我的家用计算机,并且缺乏 ssh 访问权限让我感到难过。我以前可以通过将 SSH 移动到端口 5050 来使用它,但我认为最近的一些过滤器现在将此流量视为 IM,并可能通过另一个代理将其重定向。这是我最好的猜测;无论如何,我的 ssh 连接现在在我登录之前终止。

这些天我一直在通过 HTTPS 使用 Ajaxterm,因为端口 443 仍然不受干扰,但这远非理想。 (糟糕的终端仿真,缺乏端口转发,我的浏览器以惊人的速度泄漏内存......)我尝试在 mod_ssl 之上设置 mod_proxy_connect,其想法是我可以通过 HTTPS 发送 CONNECT localhost:22 HTTP/1.1 请求,然后就一切就绪了。遗憾的是,这似乎行不通; HTTPS 连接一直有效,直到我发送完请求;然后 SSL 就崩溃了。看起来好像 mod_proxy_connect 接管了整个连接,而不是继续通过 mod_ssl 进行管道传输,这让 HTTPS 客户端感到困惑。

有办法让它发挥作用吗?我不想通过纯 HTTP 执行此操作,原因如下:

  • 留下这样一个庞大的开放代理真是太糟糕了
  • 大型开放代理在 HTTPS 上也不好,但需要身份验证,这对我来说感觉很好
  • HTTP 通过代理 - 我不太担心我的流量被嗅探,因为 ssh 将通过隧道以“明文”方式传输 - 但它的意义远不止于此比 HTTPS 更容易被破坏,而 HTTPS 根本无法被代理

要求:

  • 必须通过端口 443 工作,且不会干扰其他 HTTPS 流量(即我不能将 ssh 服务器放在端口 443 上,因为我将无法再通过 HTTPS 提供页面服务)
  • 我拥有或可以编写一个在 Windows(或 Cygwin)下运行的简单端口转发器客户端

编辑

DAG: Tunnelling SSH over HTTP(S)已向我指出,但这没有帮助:在文章末尾,他们提到 Bug 29744 - CONNECT does not work over existing SSL connection阻止通过 HTTPS 建立隧道,这正是我遇到的问题。此时,我可能正在查看一些 CGI 脚本,但如果有更好的解决方案可用,我不想将其列为要求。

最佳答案

了解公司为什么有这样的限制性政策。这可能是有充分理由的。

如果您仍然发现想要绕过该策略,您可以编写一个小型代理,该代理将在端口 443 上监听您的服务器,然后根据请求将流量转发到您的 Web 服务器或SSH 守护进程。但有两个问题。

  1. 要确定是 HTTPS 请求还是 SSH 请求,您需要尝试以(小)超时读取一些数据,这是因为 TLS/SSL 握手从客户端发送一些数据开始,而SSH 握手从服务器发送一些数据开始。超时必须足够大,以延迟在 TLS/SSL 握手中从客户端传送初始数据,因此它会使建立 SSH 连接的速度变慢。

  2. 如果您公司的 HTTP 代理是智能的,当您CONNECT到端口 443 时,并且当它检测到该情况时,它实际上会窃听预期的 TLS/SSL“握手”这不是 TLS/SSL 握手,它可能会终止 SSH 连接尝试。为了解决这个问题,您可以将 SSH 守护进程包装到 TLS/SSL 隧道中(例如 stunnel),但随后您需要根据客户端请求中的 TLS/SSL 版本来区分请求确定是否将 TLS/SSL 连接路由到 Web 服务器或 TLS/SSL 隧道 SSH 守护程序。

关于apache - 通过 HTTPS 的隧道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/181341/

相关文章:

apache - 重定向到另一个域而不影响 SEO

python - 经过快速启动后,在访问 hadoop 时遇到一些问题

apache - 请更多关注我可怜的 mod_rewrite 尝试

java - apache cxf 无法发送消息并读取超时

http - 为什么公共(public) WiFi 不支持 505 Http 版本?

curl - 来自专用服务器的 HTTPS 网站的 wget

google-app-engine - 将 Godaddy 的 SSL 证书添加到 Google App Engine

unit-testing - 减少测试带宽

node.js - NodeJs镜像网站代理

git - 连接后从代理收到 HTTP 代码 501