>我正在使用SSLContext
所以设置泽西客户端,需要禁用公用名检查以避免不必要的问题。但是,我找不到关于我们如何正确执行此操作的文档。那么,在SSLContext
中是默认禁用公用名检查(假设使用 TLS)还是我们需要显式禁用它?如果是这样,如何?谢谢。
这并不能回答您的问题,但它告诉您正在做的事情是一个坏主意,可能是由于对验证工作原理的误解引起的。
。需要禁用公用名检查以避免不必要的问题
我不知道您要避免的"不必要的问题"是什么,但不验证主机名或多或少与禁用所有验证相同,从而可以合并服务器和/或进行中间人攻击。
如果您不验证主机名但仍验证证书信任链,攻击者现在可以简单地将受信任的 CA 签名的证书用于攻击者自己的站点,例如 attacker.example.com
.CA将颁发此类证书,因为攻击者可以证明自己网站的所有权。
使用自己的证书,攻击者现在可以合并所有其他站点,因为即使主机名不是,信任链也是有效的。这就像您接受州签发的任何类型的身份证明一样,甚至不查看身份证件中的图片是否与出示身份证的人相匹配。
如果我理解正确,我认为您可以通过实现HostnameVerifier
来完成您正在尝试做的事情,并且只需在verify
方法中返回true
。您可以在ClientBuilder
上设置验证程序。例如
Client client = ClientBuilder.newBuilder()
.sslContext(sslContext)
.hostnameVerifier(hostnameVerifier)
.build();