在什么情况下,在Java中使用HostnameVerifier而不是TrustManager?一个比另一个推荐吗?看看Java (接口HostnameVerifier和接口TrustManager),我不知道什么时候最好使用它们(尽管TrustManager看起来更通用)。
在过去,我一直使用自定义TrustManager。然而,我注意到基于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检查?
发布于 2014-05-11 11:53:33
在什么情况下,在Java中使用HostnameVerifier而不是TrustManager?
绝不可能。他们做的事情不一样。TrustManage将证书作为SSL的一部分进行身份验证。HostnameVerifier将主机名作为HTTPS的一部分进行验证。他们不是在竞争。
一个比另一个推荐吗?
不是的。
编辑
TrustManager在TLS握手过程中运行。如果表示失败,则中止握手,连接失败。HostnameVerifier在TLS握手之后运行,TLS连接从TLS的角度来看已经是有效的,因此此时您知道证书是有效的,由可信的颁发者签名,不过期(?)等等,您所要做的就是决定(a)它是否来自正确的服务器,(b)您是否信任该服务器。您可以在TrustManager,中执行(b)操作,但更常见的是,您根本不提供自己的TrustManager。https://stackoverflow.com/questions/23591513
复制相似问题