2011-11-26 122 views
2

的危险这个问题似乎是一个新手,也许“笨”的问题,但请多多包涵......禁用证书验证的Java中

我仍然在努力寻找一种方式来获得我的Java应用程序使用位于JAR文件内的密钥库,我非常想试试使用the method here.来禁用证书验证。但是,在我这样做之前,我只想确认为什么你不应该这样做,以及这些原因实际上适用于我。

我听说没有证书验证可以使你的应用程序承担“中间人”攻击(我认为),但即使我是正确的,但我不确定这些实际是什么,所以请有人说明。尽管如果他们是我认为他们可能的,我不确定我的应用程序是否会受到他们的影响,因为我的应用程序只使用SSL连接从我的网站获取数据,所以用户不会告诉应用程序哪些URL参观 - 如果是有道理的......

回答

5

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

您的应用程序访问URL。在这个过程中的任何一点(任何中间网络跳跃),攻击者都可以将自己定位为“中间人”,也就是说,他会伪装成你的交流的“代理人”,能够阅读一切经过,甚至修改它:攻击者可以代表用户行事,误导他获取哪些信息,并基本访问正在传输的数据。

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

这就是如果你忽略你的密钥库,你不能验证任何服务器端证书,并且你打开man-in-the-middle攻击的大门。

+0

谢谢Miguel和user384706,你们的回答都很有帮助,我现在可以得出结论,我需要密钥存储。如果我确实设法将密钥库放入JAR文件中,它是否需要更新?我只问,因为我知道SSL证书需要更新,但我不知道是否更新它们会影响密钥库中的信息... – Andy

+1

@Andy:如果服务提供商的公钥更改,您必须更新它取决于您的关键提供商的政策。你应该为此做好准备......至少与供应商讨论。 – home

+0

@家没关系,但否则我不需要,是吗? – Andy

1

不过,如果它们是什么,我认为他们可能是,我不知道我的 申请是否曾经受到他们,因为,我的应用程序只 使用的SSL连接到我的网站获得的数据,这样用户就不必 告诉应用程序访问的网址 - 如果是有道理的......

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

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

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

+0

使用未经身份验证的SSL,您可以针对被动窃听者提供安全保护,但不会针对任何主动攻击者(可以假装为其他人)提供安全保护。唉,对大多数安全通信的主要威胁是主动攻击者(例如各种代理)。 –