noVNC 到 x11vnc 的 SSL 连接

5
我正在尝试使用x11vnc(VNC服务器)和noVNC(VNC客户端)建立SSL连接。每次尝试连接时,noVNC会显示“Unsupported Security Types:19,18”错误,x11vnc则会显示“SSL:ssl_helper [2957]:exit case 2(ssl_init failed)SSL:accept_openssl:cookie from ssl_helper [2957] FAILED. 0”错误。如果我关闭x11vnc的SSL,则客户端可以正常连接。
我知道x11vnc带有基于Java的小程序查看器。但是,我更感兴趣的是基于HTML5的noVNC。
x11vnc和noVNC都在同一台机器上运行,使用以下命令:
x11vnc: x11vnc -forever -shared -unixpw_cmd [cmd] -ssl [pem]
noVNC:./utils/websockify --ssl-only --cert=[pem] --web=./ 6080 localhost:5900
注意:两者指向同一个pem文件。我使用websockify而不是noVNC的launch.sh,以获得更多选项,如--ssl-only。
noVNC的加密选项似乎对连接服务器没有影响(无论开启还是关闭结果都相同)。
我最关心的是安全连接。目前看来,如果必须关闭x11vnc的SSL,那么打开noVNC的加密选项似乎并没有什么作用(加密选项只是使noVNC使用wss://而不是ws://)。如果这确实创建了一个安全连接,请告诉我。否则,我该如何让noVNC和x11vnc使用SSL?

1
@yondaeme1192,你的问题得到了解答吗?如果是的话,能否接受一个答案,以便其他人可以找到“已解决”的问题? - kanaka
1个回答

15

首先澄清一些问题:

noVNC和Websockify实际上是两个不同的项目:

  • Websockify 是一个通用的代理/桥接程序,它允许WebSocket连接(例如来自浏览器)连接到原始的TCP套接字服务(例如 VNC 服务器)。
  • noVNC 是HTML5 VNC客户端。

如果VNC服务器支持WebSocket连接,则不需要使用websockify。目前唯一支持直接WebSocket连接的VNC服务器是libvncserver的这个分支。由于大多数VNC服务器尚未支持WebSocket客户端,因此noVNC中包含了websockify,但websockify是一个单独的项目

您正在处理两个不同的网络连接,每个连接都有单独的加密选项:

  1. noVNC (浏览器) 到 websockify - 使用 WebSocket 协议
  2. websockify 到 x11vnc (VNC服务器) - 直接 TCP 套接字连接

WebSocket 协议支持未加密连接(ws://)和 SSL/TLS 加密连接(wss://)。

VNC 中使用的 RFB (Remote Frame Buffer) 协议在初始化期间具有升级到使用加密连接的能力。有几种支持的加密方法,例如 TLS(安全类型 18)、VeNCrypt(安全类型 19)。

现在回答您的问题:

当您传递-ssl PEM给 x11vnc 时,这将启用 RFB/VNC 加密。noVNC 不支持 RFB/VNC 加密。Javascript 的速度不足以快速加密/解密,使得无法在 noVNC 中使用。有一些关于在 Javascript 中添加加密 API 的讨论,这将使 noVNC 能够支持此类型的加密。

当您在noVNC中启用加密时,您正在启用WebSocket加密(wss://)。这将加密浏览器和websockify之间的连接。只要websockify和VNC服务器之间的连接在受信任的网络上运行(例如,在同一台服务器上运行),并且在noVNC中使用WebSocket加密,那么不会暴露未加密的数据。但是,如果您在与远程VNC服务器相同的系统上运行websockify,并且浏览器的VNC流量将发送到远程服务器,则客户端到服务器系统的VNC流量将未经加密(除非noVNC未来支持RFB/VNC VeNCrypt加密)。

Websockify的输出将指示WebSocket连接是否已加密或未加密。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接