如何在java中禁用SSLContext中的通用名检查?

时间:2015-06-15 21:48:09

标签: java ssl jersey jax-rs ssl-certificate

我正在使用SSLContext所以设置Jersey客户端,并且需要禁用公共名称检查以避免不必要的问题。但是,我找不到关于如何正确执行此操作的文档。默认情况下,SSLContext中禁用公共名称检查(假设使用TLS),或者我们是否需要明确禁用它?如果是这样,怎么样?感谢。

2 个答案:

答案 0 :(得分:3)

这不能回答你的问题,但它告诉你,你所做的是一个坏主意,可能是由于对验证工作方式的误解造成的。

  

...需要禁用常用名称检查以避免不必要的问题

我不知道你试图避免的“不必要的问题”是什么,但是没有验证主机名是否与禁用所有验证或多或少相同,因此可以合并服务器和/或做中间人攻击。

如果您不验证主机名但仍然验证证书信任链,则攻击者现在可以简单地使用由受信任CA签署的证书来攻击自己的站点,例如: attacker.example.com。 CA将发布此类证书,因为攻击者可以证明其自己站点的所有权。

使用自己的证书,攻击者现在可以合并所有其他站点,因为即使主机名不是,信任链也是有效的。这就像你接受一个国家发布的任何类型的身份证明一样,甚至没有查看是否在I.D.中的图片。匹配显示I.D。

的人

答案 1 :(得分:1)

如果我正确理解您,我认为您可以通过实施HostnameVerifier并在dyld: Library not loaded: /System/Library/Frameworks/GameplayKit.framework/GameplayKit Referenced from: /private/var/mobile/Containers/Bundle/Application/MyGame.app/Frameworks/libswiftGameKit.dylib Reason: image not found (lldb) 方法中返回true来完成您要执行的操作。您可以在ClientBuilder上设置验证程序。例如

verify