如何解决noVNC触发serververification事件的问题?
问题描述
我正尝试实现noVNC API以创建自定义元素,用于处理canvas上的noVNC帧。当调用new RFB()启动连接时触发了serververification事件,且事件的isTrusted字段为false。官方文档仅说明该事件“在需要用户确认服务器身份时触发”,想知道如何避免触发该事件,直接建立连接?
相关代码:
// javascript this.rbf = new RFB(screen, this.url.href) // 触发时机:需要用户确认服务器身份时 this.rbf.addEventListener( 'serververification', (event) => { console.log('@SERVER-VERIFICATION >> ', event.type) } )
启动websockify的命令:
websockify -v 8888 192.168.1.11:5900
解决方案
1. 使用受信任的SSL证书(生产环境推荐)
serververification事件触发的核心原因是noVNC无法验证服务器SSL证书的可信度。如果你的noVNC页面通过HTTPS访问,同时给websockify配置浏览器信任的正规SSL证书(如CA机构颁发的证书),浏览器会自动认可服务器身份,不会触发该事件。
配置websockify时指定证书和密钥:
websockify -v --cert=server.crt --key=server.key 8888 192.168.1.11:5900
2. 显式确认服务器身份(仅限测试环境)
在测试环境下,你可以在serververification事件回调中调用event.accept()手动确认服务器身份,这样就能继续建立连接,后续除非服务器身份变更,否则不会再触发该事件:
this.rbf.addEventListener('serververification', (event) => { // 仅限测试环境使用,生产环境禁用 event.accept(); });
注意:生产环境绝对不要使用这种方式,会暴露中间人攻击风险。
3. 采用非加密连接(仅限内网测试)
如果是在完全可信的内网环境测试,可以使用HTTP+未加密WebSocket(ws://协议),此时noVNC不会触发服务器身份验证事件。但这种方式数据明文传输,严禁在公网或不可信环境使用。
内容的提问来源于stack exchange,提问作者cicciosgamino
相关产品推荐
相关产品推荐

