提问者:小点点

HostnameVerifier vs TrustManager?


在Java中,在什么情况下会使用< code>HostnameVerifier而不是< code>TrustManager?一个比另一个好吗?查看Java文档(接口HostnameVerifier和接口TrustManager),我不知道什么时候使用哪一个最好(尽管< code>TrustManager似乎更通用)。

过去,我一直使用自定义的TrustManager。但是,我注意到java中的Heartbleed漏洞利用同时使用了两者(但我认为它不正确)。

编辑:当使用主机名验证程序时,是否执行其他常规X509检查,如路径构建、过期和吊销(如果配置)?我想我本质上是在问HostnameVerifier是否补充了其他检查(而不是替换它们)。

例如,假设一个开发服务器位于dev.example.com,并由内部CA签名。dev.example.com[/code>的证书中有一个DNS名称,其dev.example.com/也有一个。此外,假设我以192.168.1.10的身份连接到它。我可以使用HostnameVerifier来允许dev.example.com/[/code>和192.168.1.10吗?在这种情况下,是否允许使用附加名称,是否执行其他常规X509检查?


共1个答案

匿名用户

在Java中,什么情况下会使用HostnameVerifier而不是TrustManager?

从不他们做不同的事情。TrustManage将证书作为SSL的一部分进行身份验证。主机名验证程序将主机名作为HTTPS的一部分进行验证。他们没有竞争。

是推荐一个而不是另一个?

号码

编辑

  • TrustManager在TLS握手期间运行。如果指示失败,则握手将中止,连接将失败
  • HostnameVerifier在TLS握手后,通过从TLS角度来看已经有效的TLS连接运行,因此此时您知道证书是有效的,由受信任的颁发者签名,未过期(?)等,您所要做的就是决定(a)它是否来自正确的服务器,以及(b)您是否信任该服务器。您可以在TrustManager中执行(b),,但更常见的是,您根本不会提供自己的TrustManager