我正在尝试加密从 client1 到 client2 的消息,但它不能通过点对点完成;因为动态 IP 问题。
我决定使用中央服务器,但我不确定服务器是否应该只中继 SSL 握手,以及之后的任何后续加密消息(从客户端 1 到客户端 2)。我想到的另一种选择是让服务器将 client2 的 IP 提供给 client1,并让 client1 发起直接连接,并直接进行 SSL 握手。
或者也许有更好的方法?
这是我制定的 2 个流程:
或
最佳答案
在两个客户端之间使用直接连接,使用服务器来促进 IP 发现,是可能的最佳选择。 Client1 可以尝试连接到 Client2,如果失败则客户端可以切换角色并让 Client2 尝试连接到 Client1。
如果无法在任一方向建立直接连接(例如两个客户端都在阻止连接的路由器/防火墙后面,并且常用的 NAT 打洞技术无法打开它们),则服务器可以充当中继,类似于网络浏览器在配置为使用代理服务器时仍然可以连接到 HTTPS 服务器的方式。只要服务器按原样依赖 SSL 消息,并且客户端不验证 TCP 数据包的源 IP 地址,它就可以工作。
但是,如果客户端正在验证源地址,那么每个客户端都必须在其自身和服务器之间建立一个单独的 SSL session ,其中客户端 1 将加密数据发送到服务器,服务器解密数据并在发送时重新加密给 Client2,反之亦然。
关于ssl - 处理 SSL 客户端到服务器到客户端(中继?)的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832664/