Java 如何在自定义HostnameVerifier中获取服务器IP地址

Java 如何在自定义HostnameVerifier中获取服务器IP地址,java,ssl,hostname,rest-client,Java,Ssl,Hostname,Rest Client,我正在从HostnameVerifier实现一个自定义验证方法 @Override public boolean verify(String hostname, SSLSession session) { 这里的主机名为我提供了客户端连接到的URL中的值(IP地址或dns名称),而SSLSession为我提供了所有对等值,如peerCert(在我的情况下是服务器证书)和peerCertChain。它还有peerHost,它是URL中的值 我正在尝试获取客户端连接到的服务器IP地址。服务器(数量

我正在从HostnameVerifier实现一个自定义验证方法

@Override
public boolean verify(String hostname, SSLSession session) {
这里的主机名为我提供了客户端连接到的URL中的值(IP地址或dns名称),而SSLSession为我提供了所有对等值,如peerCert(在我的情况下是服务器证书)和peerCertChain。它还有peerHost,它是URL中的值

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

hostname 
peerHost=session.getPeerHost()
这两个都给了我URL中的值(即loadBalancer IP)

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

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


关于此问题的任何建议/帮助都非常受欢迎

不可能从连接中获取负载平衡器后面的服务器的IP地址,因为连接是到负载平衡器的,而不是到服务器的。到达服务器地址的唯一方法是负载平衡器告诉您其地址

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


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

感谢您的回复和明确解释。这是有道理的。非常感谢。
@Override
public boolean verify(String hostname, SSLSession session) {