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