2

不确定我是否真的是最新的,但我正在寻找一种方法来将我现有的项目转换为使用 HTML5 websockets。

这是我的情况:

- Client runs a modified java vnc applet with extra parameter (CONNECT).

- Modified stunnel listenin on webserver (with both public, private IP) port 443

- Client connects to 443 and sends (prior to RFB) a HTTP packet like :
  'CONNECT 10.0.0.1:4001'

- Stunnel opens a new stream to 10.0.0.1:4001 using SSL wrapper

- VNC Server (@10.0.0.1:4001) responds, connection is established.

现在我想摆脱 Java Applet 并使用 NoVNC 切换到 Websocket。

我希望能够:

- Open a single port on the webserver (HTTPS preferably)
- Have client connect using HTML5 only (no more java applet)

我无法改变 :

- VNCServer will still be listening on private LAN only.
- VNCServer will still listen to a bunch of ports, each corresponding to
  a virtual server

问题是:

- How to give NoVNC the notion of target HOST:PORT ?
- Is stunnel still be usable ? Or should I change to websocket proxy ?

如果有人有起点,我将不胜感激!

4

1 回答 1

5

免责声明:我创建了 noVNC,所以我的回答可能有很大的偏见;-)

我先回答你第二个问题

noVNC 不能直接使用 stunnel。问题是 WebSockets 协议有一个类似 HTTP 的初始握手,并且消息是框架的。此外,在向 WebSockets 添加二进制负载支持之前,负载是由 websockets 代理 (websockify) 进行 base64 编码的。为 stunnel 添加必要的支持并非易事,但肯定是可行的。事实上, noVNC 问题 #37是一个理想的功能,可以将此支持添加到 stunnel。

第一个问题

RFB.connect(host, port, password)noVNC 通过该方法已经有了 HOST:PORT 的概念。vnc_auto.html顶层文件显示了如何让 noVNC 根据指定为 URL 查询字符串参数的主机、端口和密码在页面加载时自动连接。

但是,我认为您真正要问的是如何让 noVNC 连接到后端的备用 VNC 服务器端口。noVNC 和 websockify 没有直接解决这个问题。有几种方法可以解决这个问题,它通常涉及带外设置/授权机制,因此代理不能用于发起任意主机的攻击。例如,在我的公司,我们有一个基于 Web 的管理框架,它集成了 noVNC,当用户想要连接到控制台时,一个经过身份验证的 AJAX 调用用于为该特定用户和他们想要连接的系统配置代理。我们的网络管理界面仅限内部。

Ganeti Web Manager 使用类似的模型并且源代码可用。他们有一个支持 WebSockets 的 VNCAuthProxy 的分支。他们使用从 Web 界面到 VNCAuthProxy 的控制通道来设置与特定 VNC 服务器 host:port 关联的临时密码。

OpenStack (Nova) 还集成了 noVNC 使用类似的基于带外令牌的模型来允许使用他们的 nova-vncproxy 进行访问。

一些链接:

于 2011-04-18T15:49:06.840 回答