2017-02-16 276 views
1

我有一个从HostnameVerifier实现的自定义验证方法。如何获得自定义HostnameVerifier中的服务器IP地址

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

主机名这里让我出现在该客户端连接到(或IP地址或DNS名称)和的SSLSession URL中的价值带给我喜欢peerCert所有同行值(在我的情况服务器证书)和peerCertChain。它也具有来自URL的值的peerHost。

我想获取我的客户端连接到的服务器IP地址。 服务器(2个)在负载平衡器之后是。因此,我的客户端URL在调用服务器时将始终具有负载均衡器IP。

hostname 
peerHost=session.getPeerHost() 

这两个都给我从URL的值(这是loadBalancer IP)。

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

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

在这个大加赞赏

回答

2

这是不可能得到来自背后的连接负载均衡服务器的IP地址,因为连接到负载平衡器,而不是服务器的任何建议/帮助。您可以访问服务器地址的唯一方法是负载均衡器会告诉您其地址。

假设负载均衡器是TLS连接的端点,并且可以修改TLS内部的HTTP通信,那么可以在响应中添加自定义HTTP标头。但是,这些信息只有在TLS握手完成后才可用,即尚未存在于HostnameVerifier中,因为在TLS握手过程中调用了该信息。

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

+0

感谢您的回复和明确的解释。这确实有道理。谢谢。 – Vishwa