我正在尝试与x11vnc(VNC服务器)和noVNC(VNC客户端)一起使用SSL连接。每当我尝试连接时,都会从noVNC和“SSL:ssl_helper [2957]”中收到错误“不受支持的安全类型:19,18”:退出情况2(ssl_init失败)
SSL:accept_openssl:来自ssl_helper [2957]的cookie失败。 x11vnc中的“0”。如果我关闭了x11vnc的SSL,则客户端可以毫无问题地进行连接。

我确实意识到x11vnc确实与基于Java的小程序查看器打包在一起。但是,我对基于HTML5的noVNC更感兴趣。

x11vnc和noVNC都使用以下命令在同一台计算机上运行:

x11vnc:
x11vnc-永远-共享-unixpw_cmd [cmd] -ssl [pem]

noVNC:./utils/websockify --ssl-only --cert = [pem] --web =。/6080本地主机:5900

注意:两者都指向同一个pem。我使用websockify而不是noVNC的launch.sh拥有更多选项,例如--ssl-only。

noVNC的加密选项似乎对连接服务器没有影响(无论打开还是关闭,结果都是相同的)。

我最担心的是安全连接。到目前为止,如果必须关闭x11vnc的SSL,打开noVNC的crypto选项似乎没有多大作用(加密选项使noVNC使用wss://而不是ws://)。如果这样做确实建立了安全的连接,请告诉我。否则,如何使noVNC和x11vnc与SSL一起使用?

最佳答案

首先要澄清:

noVNC和websockify实际上是独立的项目:

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

  • 如果VNC服务器支持WebSocket连接,则不需要websockify。当前唯一支持直接WebSocket连接的VNC服务器是this fork of libvncserver。 websockify包含在noVNC中,因为大多数VNC服务器尚不支持WebSocket客户端,但是websockify是separate project

    您正在处理两个不同的网络连接,每个网络连接都有单独的加密选项:
  • noVNC(浏览器)到websockify-使用WebSocket协议(protocol)
  • websockify到x11vnc(VNC服务器)-直接TCP套接字连接

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

    VNC中使用的RFB协议(protocol)(远程帧缓冲区)具有在初始化过程中升级以使用加密连接的能力。支持多种加密方法,例如TLS(安全类型18),VeNCrypt(安全类型19)。

    现在到您的问题:

    当您将-ssl PEM传递给x11vnc时,将启用RFB/VNC加密。 noVNC不支持RFB/VNC加密。 Java语言的速度不够快,无法足够快地进行加密/解密,因此无法用于noVNC。有some discussion about adding a crypto API to Javascript可使noVNC支持这种类型的加密。

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

    websockify的输出将指示WebSocket连接是加密的还是未加密的。

    关于ssl - noVNC到x11vnc SSL连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6391005/

    10-08 23:07