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

问题描述 投票:1回答:1

我有一个从HostnameVerifier实现的自定义验证方法。

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

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

我想获取客户端连接的服务器IP地址。服务器(数量为2个)落后于Load Balancer。因此,在调用服务器时,我的客户端URL将始终具有Load Balancer IP。

hostname 
peerHost=session.getPeerHost()

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

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

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

任何建议/帮助都非常感谢

java ssl hostname rest-client
1个回答
2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.