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

How to get server IP address in custom HostnameVerifier

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

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

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

的值

我正在尝试获取我的客户端连接到的服务器 IP 地址。 服务器(2 个)在负载平衡器 后面。所以我的客户端 URL 在调用服务器时将始终拥有负载均衡器 IP。

hostname 
peerHost=session.getPeerHost()

这些都给我 URL 的值(即 loadBalancer IP)。

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

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

对此非常感谢suggestion/help

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

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

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