在什么情况下,在Java中将使用HostnameVerifier而不是TrustManager?是否推荐其中一个?查看Java文档(Interface HostnameVerifierInterface 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.com192.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/

    10-10 15:06