通过套接字连接使用DataOutputStream发送数据是否安全?

时间:2018-07-12 07:24:13

标签: java security

我的问题是关于Java套接字的。我初始化一个新的套接字,然后通过该套接字将DataOutputStream发送到Internet上的主机。那么,发送此数据是安全的,没有人可以阅读此数据吗?

谢谢。

2 个答案:

答案 0 :(得分:4)

如果您使用常规的Socket,则不会,中间的一个人有可能会偷听您。您需要使用SSLSocket进行加密通信。

答案 1 :(得分:2)

详述@Kayaman的答案时,有多种方法可以拦截通过普通套接字进行的通信。

  • 可能是主机或系统管理程序操作系统中记录了数据包
  • 您本地网络上的另一台计算机可能是“数据包嗅探”;也就是说,将网络接口设置为“混杂”模式,以读取不是其地址的数据包。
  • 该路由中的任何网关/路由器/网络交换机都可能记录数据包。

然后会有更多微妙的攻击。例如,某件事可能已经接管了DNS服务器,并导致您要与之交谈的主机名被路由到在其他IP地址上运行的假服务器。然后,伪造的服务器可以将数据包发送到真实服务器上,并使用相反的方向来处理数据包。 (这被称为“中间人”攻击。)

如果您使用SSLSocket且已建立适当的信任,则:

  • 您将在中间攻击中受到保护,免受人为攻击
  • 流量会通过网络进行加密,并且
  • 如果操作系统安全且在两端都得到了适当的管理,您将拥有数据的端到端安全性。

(请注意,除了上述警告以外,还有一些警告。但是这个答案已经足够长了。)


最后,使用DataOutputStream(相对于Reader)对安全性没有任何实际影响。对于具有中等黑客技能的人来说,取消二进制编码流并不是什么挑战。