如何为本地客户端使用安全的WebSocket连接

时间:2020-11-05 22:55:26

标签: security websocket executable communication npapi

我需要有关安全风险和概念证明的信息,以便与本地客户端合作。

在我的选择中,用户将安装两个组件:

  1. 游戏客户端
  2. 客户端启动器

启动器一直在作为后台进程运行。启动器提供了WebSocket服务器。 用户将打开我的网站开始游戏(带有游戏服务器列表和其他设置)。该网站连接到游戏启动器以处理所有操作(更改配置,启动游戏可执行文件)。

问题:

如何实现与网站和游戏启动器的通信?好的,Websockets,是的。但是出于安全原因,浏览器禁止连接到localhost / 127.0.0.1。

作为DNS伪造指针或指向local.game.tld之类的子域的主机文件是不好的,因为SSL证书在此处可能由于不正确的使用而被撤销。

另一个想法是为浏览器提供NPAPI插件。但是,看来NPAPI已过时,对将来毫无用处。

webpages与本地安装的software之间进行通信的最佳实践是什么?

1 个答案:

答案 0 :(得分:1)

但是出于安全原因,浏览器禁止连接到localhost / 127.0.0.1

这不是事实。浏览器允许您连接到localhost / 127.0.0.1。我一直在我的机器上这样做。

问题在于TLS(wss://localhost,而不是ws://localhost)需要证书,浏览器禁止混合内容(您不能让https网站加载未加密的资源)。

作为DNS的虚假指针或指向local.game.tld之类的子域的主机文件是错误的,因为SSL证书在此处可能由于不良用法而被吊销。

作为游戏安装程序的一部分,您可以创建一个hosts证书的mygame.localhost文件条目(可能使用本地脚本),然后要求玩家使用其证书授权安装证书密码。这样一来,您的证书就不会被撤销...但是您说的对,这是他的最佳选择。

编辑:另外,请注意,域名必须位于结尾,而不是开头(即game.localhost而不是localhost.game)。

在网页和本地安装的软件之间进行交流的最佳实践是什么?

通常来说,如果您的游戏安装在本地计算机上,则无需加密本地浏览器与本地计算机之间的通信。

您可以轻松地编写本地服务器以仅接受来自本地计算机的连接(或者,如果需要,最坏的情况是接受来自局域网的连接-尽管这样做会增加安全风险)。

您的网页和WebSocket数据可以在本地服务器和浏览器之间“明文”发送(ws://http://),因为它们都位于同一台计算机上,因此您无需不需要浏览器。当与外部服务(was:// / https://)通信时,本地服务器将启动(作为客户端)所需的任何加密连接。

编辑(来自评论):

我只知道两种解决方案:

  1. 安装自签名证书;或

  2. 使用http而不是https,并让服务器像对待客户端一样处理外部流量(因此,对所有外部流量进行加密)。