ssl - 处理 SSL 客户端到服务器到客户端(中继?)的最佳方式

标签 ssl p2p server

我正在尝试加密从 client1 到 client2 的消息,但它不能通过点对点完成;因为动态 IP 问题。

我决定使用中央服务器,但我不确定服务器是否应该只中继 SSL 握手,以及之后的任何后续加密消息(从客户端 1 到客户端 2)。我想到的另一种选择是让服务器将 client2 的 IP 提供给 client1,并让 client1 发起直接连接,并直接进行 SSL 握手。

或者也许有更好的方法?

这是我制定的 2 个流程:

enter image description here

enter image description here

最佳答案

在两个客户端之间使用直接连接,使用服务器来促进 IP 发现,是可能的最佳选择。 Client1 可以尝试连接到 Client2,如果失败则客户端可以切换角色并让 Client2 尝试连接到 Client1。

如果无法在任一方向建立直接连接(例如两个客户端都在阻止连接的路由器/防火墙后面,并且常用的 NAT 打洞技术无法打开它们),则服务器可以充当中继,类似于网络浏览器在配置为使用代理服务器时仍然可以连接到 HTTPS 服务器的方式。只要服务器按原样依赖 SSL 消息,并且客户端不验证 TCP 数据包的源 IP 地址,它就可以工作。

但是,如果客户端正在验证源地址,那么每个客户端都必须在其自身和服务器之间建立一个单独的 SSL session ,其中客户端 1 将加密数据发送到服务器,服务器解密数据并在发送时重新加密给 Client2,反之亦然。

关于ssl - 处理 SSL 客户端到服务器到客户端(中继?)的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832664/

相关文章:

ssl - Fedora 更新后 Pound 停止工作

javascript - 使用 PeerJS 进行广播或对等发现

stream - 远程视频流无法与 WebRTC 配合使用

mysql - SQL在按日期分组的已知集中缺失的表中插入值

node.js - 通过 UI 设置 Gitlab CI/CD 环境变量

java - 带有运行时证书的 SSL Java

node.js - 使用来自拥有的域的 TLS 证书,并在 AWS Elastic Beanstalk 提供的 URL 上使用它

instant-messaging - 如何构建一个简单的 2 人游戏,通过 Internet 进行通信,并且在任何服务器上都没有自定义代码?

javascript - 简单的在线网络游戏最终崩溃

ssl - 使用自托管 GitLab 的自签名证书 SSL 错误