我正在尝试与x11vnc(VNC服务器)和noVNC(VNC客户端)使用SSL连接。每当我尝试连接时,我从noVNC收到错误“不支持的安全类型:19,18”和“SSL:ssl_helper [2957]:退出案例2(ssl_init失败) SSL:accept_openssl:来自ssl_helper的cookie [2957] FAILED。来自x11vnc的0“。如果我关闭x11vnc的SSL,客户端可以连接没问题。
我确实知道x11vnc确实打包了一个基于java的applet viewer。但是,我对基于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?
答案 0 :(得分:14)
首先澄清:
noVNC和websockify实际上是独立的项目:
如果VNC服务器支持WebSocket连接,则不需要websockify。当前支持直接WebSocket连接的唯一VNC服务器是this fork of libvncserver。 websockify包含在noVNC中,因为大多数VNC服务器还不支持WebSocket客户端,但websockify是separate project。
您正在处理两个不同的网络连接,每个网络连接都有单独的加密选项:
WebSocket协议支持未加密连接(ws://)和SSL / TLS加密连接(wss://)。
VNC中使用的RFB协议(远程帧缓冲区)能够在初始化期间升级以使用加密连接。支持多种加密方法,如TLS(安全类型18),VeNCrypt(安全类型19)。
现在回答您的问题:
当您将-ssl PEM
传递给x11vnc时,启用了RFB / VNC加密。 noVNC不支持RFB / VNC加密。 Javascript的速度不够快,加密/解密速度不够快,无法用于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加密支持)。 / p>
websockify的输出将指示WebSocket连接是加密还是未加密。