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

Ssl noVNC仅使用HTTPS连接到专用LAN上的VNCServer,ssl,websocket,vnc,vnc-server,Ssl,Websocket,Vnc,Vnc Server,不确定我是否真的是最新的,但我正在寻找一种方法,将我现有的项目转换为使用HTML5WebSocket 我的情况如下: - 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

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

我的情况如下:

- 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小程序,使用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,所以我的答案可能有很大的偏见;-)

我先回答你第二个问题:

noVNC不能直接使用stunnel。问题在于WebSockets协议有一个类似HTTP的初始握手,并且消息是框架化的。此外,在向WebSockets添加二进制有效负载支持之前,有效负载由WebSockets代理(websockify)进行base64编码。向stunnel添加必要的支持并非微不足道,但肯定是可行的。事实上,这是一个理想的功能,以增加这种支持特技

第一个问题

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

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

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

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

一些链接:


感谢您的精彩完整的回答(与往常一样)。我对python世界还很陌生,所有这些源代码,尤其是nova,似乎都与框架进行了深度集成;因此,我无法“轻易”摆脱它。我尝试过VNCAuthProxy,但也无法运行它(请参阅)。我肯定错过了一些非常明显的东西,但无法找出原因。另外,如果有人能够编写一个任何人都可以在其内部项目中使用的“开箱即用”解决方案(而不需要大师级的python技能),那也太好了。很高兴您能帮我:)@Disco,是的,主机:端口选择与身份验证/授权密切相关。如果您有很多VNC服务器,那么您可能有某种框架或系统用于管理它们。noVNC连接到这些系统的设置/授权应链接到该框架中。如果您只有几个VNC服务器,那么您可以为它们启动几个websockify实例。您可能处于中间位置,希望实现一些websockify自动化,但没有框架。在接下来的评论中继续。。。。。。继续的。我做了一个又快又脏的补丁,可以满足你的需要。它允许将目标端口作为WebSocket握手的一部分传递(在路径中),并将端口限制在5900-5999范围内。我不会将其提交到主流,因为这会带来一些安全问题,您需要小心,但它可能对您有用: