2017-02-16 25 views
1

У меня есть собственный метод проверки, реализованный из HostnameVerifier.Как получить IP-адрес сервера в пользовательском HostnameVerifier

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

имя хоста здесь дает мне настоящее значение в URL, к которому клиент подключается к (либо адрес или доменное имя IP) и SSLSession дает мне все значения пэра как peerCert (в моем случае серверные сертификаты) и peerCertChain. Он также имеет peerHost, который является значением URL.

Я пытаюсь получить IP-адрес сервера, к которому подключается мой клиент. Серверы (2 в количестве) являются за балансировщиком нагрузки. Таким образом, мой URL-адрес клиента всегда будет иметь IP-адрес Load Balancer при вызове сервера.

hostname 
peerHost=session.getPeerHost() 

Они оба дают мне значение из URL (то есть LoadBalancer IP).

Как получить IP-адрес сервера, который находится за балансировщиком нагрузки в моем собственном HostnameVerifier?

SSLSession имеет сертификаты сервера .. как я могу получить IP-адрес сервера?

Любое предложение/помощь по этому вопросу высоко ценятся

ответ

2

невозможно получить IP-адрес сервера за компенсатором нагрузки от соединения, поскольку соединение с балансировкой нагрузки, а не на сервер. Единственный способ, которым вы можете попасть на адрес серверов, - это рассчитать балансировку нагрузки вашего адреса.

Предполагая, что балансировщик нагрузки является конечной точкой соединения TLS и может изменять HTTP-трафик внутри TLS, в ответ можно добавить пользовательский HTTP-заголовок. Но эта информация будет доступна только после того, как будет выполнено рукопожатие TLS, то есть еще не в HostnameVerifier, потому что это вызывается во время установления связи TLS.

Если балансировщик нагрузки не является конечной точкой соединения TLS, а просто передает TCP-соединение без изменений на сервер, вы все равно не можете получить IP-адрес из соединения, но вы можете различать серверы, если они используют разные сертификаты. Содержимое сертификата должно быть доступно в HostnameVerifier.

+0

Благодарим за ответ и разъяснение. это имеет смысл. Спасибо. – Vishwa