目标
允许浏览器与本地运行的服务交换信息。允许服务找出运行浏览器的用户(Windows 中的登录会话)。如果可能,请避免在机器上存储 TLS 证书和私钥。奖励任务:为卡巴斯基或 Sophos 等防病毒软件代理所有 TCP 连接的设置提供解决方案。
故事
底层操作系统是 Windows,但可以是任何现代操作系统。系统中有一个守护进程正在运行。对于 Windows,这是一项 Windows 服务。Internet 浏览器从远程服务器加载了一个 JavaScript,它将数据发送到守护进程。守护程序没有 HTTP/HTTP 服务器。相反,守护进程打开 N 个端口并侦听传入连接。N 是低两位数。
JS 向 N 范围内的一组选定端口 K 发起 TCP 连接。在当前实现中,JS 尝试从 127.0.0.1:port-number 加载 JS 脚本。守护进程接受连接并立即关闭它(有点敲门)。守护进程从 JS “敲门”的端口中恢复数据。
在当前实现中,后端选择一个唯一的端口元组,例如 3 个端口组合。元组是标识浏览器会话的键。该服务收集“敲门”——特定操作系统进程访问的端口。该服务使用收集的端口查询后端。
该解决方案的目标之一是避免在服务中实施 HTTP/HTTPS 服务器并节省 SSL 证书的维护。
问题
- JS 连接端口的顺序没有定义。具体来说,两个浏览器可以同时运行敲击会话。
- 该服务可能无法打开范围 N 中的某些端口,因为这些端口很忙。
顺序并不重要,因为服务器从范围 N 中选择了一个唯一的组合。我需要系统容忍丢失的端口。我正在考虑选择多个元组并使用多个范围 N。
问题
我怎样才能采用FEC来解决这个问题?设计有意义吗?