我正在尝试与x11vnc (VNC服务器)和noVNC (VNC客户端)使用SSL连接。每当我尝试连接时,我收到来自noVNC的错误消息“不支持的安全类型: 19,18”和来自x11vnc的错误消息"SSL: ssl_helper2957:退出案例2 (ssl_init失败) SSL: accept_openssl: ssl_helper2957中的cookie失败。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本地主机:5900
注意:两者都指向相同的pem。我使用websockify而不是noVNC的launch.sh来获得更多的选项,比如--ssl-only。
noVNC的encrypt选项似乎对连接到服务器没有影响(无论是打开还是关闭,结果都是一样的)。
我最关心的是安全连接。到目前为止,如果必须关闭x11vnc的SSL (加密选项使noVNC使用wss://而不是ws://),那么打开noVNC的encrypt选项的作用似乎不大。如果这确实创建了安全连接,请让我知道。否则,我如何让noVNC和x11vnc与SSL一起工作?
发布于 2011-06-19 03:59:36
First一些澄清
noVNC和websockify实际上是独立的项目:
如果VNC服务器支持WebSocket连接,那么就不需要websockify了。目前唯一支持直接WebSocket连接的VNC服务器是this fork of libvncserver。websockify包含在noVNC中,因为大多数VNC服务器还不支持WebSocket客户端,但websockify是一个separate project。
您正在处理两个不同的网络连接,每个网络连接都有单独的加密选项:
将protocol
WebSocket协议支持未加密连接(ws://)和SSL/TLS加密连接(wss://)。
VNC中使用的RFB协议(远程帧缓冲区)能够在初始化期间升级以使用加密连接。支持几种加密方法,例如TLS (安全类型18)、VeNCrypt (安全类型19)。
现在回答您的问题
当您将-ssl PEM
传递给x11vnc时,这将启用RFB/VNC加密。noVNC不支持RFB/VNC加密。Javascript的加密/解密速度还不够快,不足以用于noVNC。有使noVNC能够支持这种类型的加密的some discussion about adding a crypto API to Javascript。
当您在noVNC中启用加密时,您正在启用WebSocket加密(wss://)。这将加密浏览器和websockify之间的连接。只要websockify和VNC服务器之间的连接是在可信的网络上(例如,两者都在同一服务器上运行),并且在noVNC中使用WebSocket加密,则不会暴露未加密的数据。但是,如果您在浏览器所在的系统上运行websockify,并且VNC服务器是远程的,那么从您的客户端到服务器系统的VNC流量将不会被加密(除非noVNC将来获得RFB/VNC VeNCrypt加密支持)。
websockify的输出将指示WebSocket连接是加密的还是未加密的。
https://stackoverflow.com/questions/6391005
复制相似问题