不知道我是否真的是最新的,但是我正在寻找一种将现有项目转换为使用HTML5 websocket的方式。
这是我的情况:
- 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 ?
如果有人有出发点,我将不胜感激!
最佳答案
免责声明:我创建了noVNC,所以我的回答可能有很大偏差;-)
我先回答第二个问题:
stunnel不能被noVNC直接使用。问题在于,WebSockets协议具有类似于HTTP的初始握手,并且消息已成帧。另外,在向WebSockets添加二进制有效负载支持之前,有效负载由websockets代理(websockify)进行base64编码。向通道添加必要的支持并非易事,但肯定是可行的。实际上,noVNC issue #37是将这种支持添加到stunnel的理想功能。
第一个问题:
noVNC已经通过RFB.connect(host, port, password)
方法有了HOST:PORT的概念。顶级文件vnc_auto.html
显示如何使noVNC根据指定为URL查询字符串参数的主机,端口和密码在页面加载时自动连接。
但是,我认为您真正要问的是如何使noVNC连接到后端的备用VNC服务器端口。 noVNC和websockify无法直接解决此问题。有几种方法可以解决此问题,并且通常涉及带外设置/授权机制,因此该代理不能被任意主机用来发起攻击。例如,在我公司,我们有一个基于Web的管理框架,该框架集成了noVNC,并且当用户想要连接到控制台时,将使用经过身份验证的AJAX调用为该特定用户和他们想要连接的系统配置代理。我们的Web管理界面仅是内部的。
Ganeti Web Manager使用类似的模型,并且源可用。他们有支持WebSockets的VNCAuthProxy的分支。他们使用从Web界面到VNCAuthProxy的控制通道来设置与特定VNC服务器host:port关联的临时密码。
OpenStack(Nova)还集成了noVNC,它使用类似的基于带外令牌的模型来允许其nova-vncproxy访问。
一些链接:
Ganeti Web Manager
Wiki page about how noVNC works in Ganeti Web Manager
Ganeti Web Manager sources
Ganeti Web Manager VNCAUthProxy sources
Using noVNC in Nova/OpenStack
OpenStack fork of noVNC
Old nova-vnc-proxy code
Current nova vnc proxy code
关于ssl - noVNC仅使用HTTPS连接到专用LAN上的VNCServer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5703467/