如何在自定义HostnameVerifier

时间:2017-02-16 16:11:41

标签: java ssl hostname rest-client

我正在使用HostnameVerifier实现自定义验证方法。

@Override
public boolean verify(String hostname, SSLSession session) {

主机名在这里为我提供了客户端连接到的URL中的值(IP地址或DNS名称), SSLSession 为我提供了所有对等值比如peerCert(在我的案例中是服务器证书)和peerCertChain。它还有peerHost,它是URL的值。

我正在尝试获取客户端连接的服务器IP地址。 服务器(数量为2)后面的负载均衡器。因此,在调用服务器时,我的客户端URL将始终具有Load Balancer IP。

hostname 
peerHost=session.getPeerHost()

这两个都给了我URL的值(即loadBalancer IP)。

如何获取服务器的IP地址,它位于我的自定义HostnameVerifier中的负载均衡器后面?

SSLSession 已获得服务器证书..如何获取服务器IP地址?

对此非常感谢的任何建议/帮助

1 个答案:

答案 0 :(得分:2)

无法从连接获取负载均衡器后面的服务器的IP地址,因为连接是负载均衡器而不是服务器。您可以访问服务器地址的唯一方法是负载均衡器是否会告诉您其地址。

假设负载均衡器是TLS连接的端点,并且可以修改TLS内的HTTP流量,则可以在响应中添加自定义HTTP标头。但是,此信息仅在TLS握手完成后才可用,即尚未在HostnameVerifier中,因为这是在TLS握手期间调用的。

如果负载均衡器不是TLS连接的端点,而只是将TCP连接转发到服务器,则仍然无法从连接中获取IP地址,但如果服务器使用不同的证书,则可能会区分这些服务器。证书的内容应该可以在HostnameVerifier中访问。