HostnameVerifier与TrustManager?

时间:2014-05-11 10:31:49

标签: java ssl https jsse

在什么情况下使用HostnameVerifier而不是TrustManager的Java?一个推荐超过另一个?查看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检查?

1 个答案:

答案 0 :(得分:6)

  

在什么情况下,在Java中的TrustManager上使用HostnameVerifier?

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

  

推荐的是另一个吗?

没有

修改

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