noVNC仅使用HTTPS连接到专用LAN上的VNCServer

Dis*_*sco 2 ssl vnc vnc-server websocket

不确定我是否真的是最新的,但我正在寻找一种方法来转换我现有的项目以使用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.
Run Code Online (Sandbox Code Playgroud)

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

我希望能够:

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

我无法改变 :

- VNCServer will still be listening on private LAN only.
- VNCServer will still listen to a bunch of ports, each corresponding to
  a virtual server
Run Code Online (Sandbox Code Playgroud)

问题是:

- How to give NoVNC the notion of target HOST:PORT ?
- Is stunnel still be usable ? Or should I change to websocket proxy ?
Run Code Online (Sandbox Code Playgroud)

如果有人有起点,我真的很感激!

kan*_*aka 5

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

我先回答你的第二个问题:

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

第一个问题:

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

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

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

此外,OpenStack(Nova)集成noVNC使用类似的基于带外令牌的模型,允许使用nova-vncproxy进行访问.

一些链接: