在什么情况下,在Java中将使用HostnameVerifier
而不是TrustManager
?是否推荐其中一个?查看Java文档(Interface HostnameVerifier和Interface TrustManager),我无法确定什么时候最好使用它(尽管TrustManager
似乎更通用)。
过去,我一直使用自定义TrustManager
。但是,我注意到Heartbleed exploit in java同时使用了两者(但我认为它不正确)。
编辑:使用HostnameVerifier
时,是否还会执行其他常规X509检查,例如路径构建,到期和吊销(如果已配置)?我想我本质上是在问HostnameVerifier
是否补充了其他检查(而不是代替它们)。
例如,假设开发服务器位于dev.example.com
处,并且由内部CA对其进行签名。 dev.example.com
的证书中有一个DNS名称,即dev.example.com
。此外,假设我以192.168.1.10
的形式连接到它。我可以使用HostnameVerifier
来同时允许dev.example.com
和192.168.1.10
吗?在这种情况下,是否允许使用附加名称,并且是否执行其他常规X509检查?
最佳答案
绝不。他们做不同的事情。 TrustManage对证书进行身份验证,作为SSL的一部分。 HostnameVerifier验证主机名是否是HTTPS的一部分。他们没有竞争。
不。
编辑
TrustManager
在TLS握手期间运行。如果指示失败,则握手中止并且连接失败。 HostnameVerifier
在TLS握手后,从TLS角度来看已经有效的TLS连接上运行,因此在那时,您知道证书是有效的,由受信任的颁发者签名,未过期(?)等。 。,然后您要做的就是(a)是否来自正确的服务器,以及(b)您是否信任该服务器。您可能会(b)在TrustManager,
中进行操作,但更常见的是,您根本不会提供自己的TrustManager
。 关于java - HostnameVerifier与TrustManager?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23591513/