在Java中禁用证书验证的危险

时间:2011-11-26 19:14:13

标签: java security validation ssl certificate

这个问题可能看起来像个新手,也许是'愚蠢'的问题,但请耐心等待......

我仍然在努力寻找一种方法让我的Java应用程序使用位于JAR文件中的密钥库,我很想用the method here.一起禁用证书验证但是,在我之前这样做,我只想确认为什么你不应该这样做以及这些原因是否真的适用于我。

我听说没有证书验证可以让你的申请对“中间人”攻击负责(我认为),但即使我是正确的,我也不确定这些实际上是什么,所以请有人解释。虽然,如果他们是我认为他们可能的,我不确定我的应用程序是否受制于他们因为,我的应用程序只使用SSL连接从我的网站获取数据,因此用户不告诉应用程序哪些URL访问 - 如果这是有道理的......

2 个答案:

答案 0 :(得分:5)

这是一个攻击场景。其他人可能想要贡献更多。

您的应用程序访问URL。在沿途的某个时刻(任何中间网络跳跃),攻击者可以将自己定位为“中间人”,也就是说,他会假装成为您的通信的“代理”,能够阅读通过的所有内容,甚至在路上修改它:攻击者可以代表用户行事,误导他获取的信息,并基本上访问正在传输的数据。

输入SSL:您的客户端从服务器接收证书,该证书具有有效密钥(由已知的证书颁发机构签名,或存在于您的密钥库中)。然后,服务器将使用该密钥对其发送的所有内容进行签名和加密。如果攻击者将自己置于中间位置,他将无法读取数据(加密)或修改数据(已签名,修改会破坏签名)。他仍然可以完全阻止通信,但这是另一个故事。

那就是......如果你忽略你的密钥库,就无法验证任何服务器端证书,而是打开了man-in-the-middle攻击的大门。

答案 1 :(得分:1)

  

但是,如果他们是我认为他们可能的,我不确定是否   我的申请一直受他们的影响,因为我的申请只是   使用SSL连接从我的网站获取数据,因此用户不这样做   告诉应用程序访问哪些URL - 如果有意义的话......

如果您通过SSL连接到服务器而您没有进行任何身份验证,则实际上您没有安全性 您不知道与您交谈的终端是谁。

用户未输入网址但URL是您网站的硬编码网址这一事实无关紧要。将数据从客户端转发到服务器的简单代理可以窃取所有客户端的数据,因为没有任何类型的身份验证(这是中间人攻击中的人)。

我建议你把你正在使用的代码加载到密钥库中,以便获得帮助。
否则,如果您对安全性没有任何要求,并且您没有任何敏感数据,则应该进行普通连接(即非SSL),以便您的性能不会因不必要(在您的情况下)SSL而恶化开销