2017-02-16 7 views
1

J'ai une méthode de vérification personnalisée implémentée depuis HostnameVerifier.Comment obtenir l'adresse IP du serveur dans HostnameVerifier personnalisé

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

Le nom d'hôte ici me donne la valeur présente dans l'URL à laquelle le client se connecte à (adresse IP ou le nom dns) et le SSLSession me donne toutes les valeurs de pairs comme peerCert (dans mon cas serveur certs) et peerCertChain. Il a aussi peerHost qui est la valeur de l'URL. J'essaie d'obtenir l'adresse IP du serveur auquel mon client se connecte. Les serveurs (au nombre de 2) sont derrière Load Balancer. Donc, l'URL de mon client aura toujours l'adresse IP Load Balancer lors de l'appel du serveur.

hostname 
peerHost=session.getPeerHost() 

Ces deux éléments me donnent la valeur de l'URL (c'est-à-dire loadBalancer IP).

Comment obtenir l'adresse IP du serveur qui est derrière l'équilibreur de charge dans mon HostnameVerifier personnalisé?

SSLSession possède des certificats de serveur. Comment puis-je obtenir l'adresse IP du serveur?

Toute suggestion/aide à ce sujet très apprécié

Répondre

2

Il est impossible d'obtenir l'adresse IP du serveur derrière un équilibreur de charge de la connexion, car la connexion est à l'équilibreur de charge et non sur le serveur. La seule façon d'accéder à l'adresse des serveurs est de savoir si l'équilibreur de charge vous indiquera son adresse. En supposant que l'équilibreur de charge est l'extrémité de la connexion TLS et qu'il peut modifier le trafic HTTP à l'intérieur du TLS, il est possible d'ajouter un en-tête HTTP personnalisé dans la réponse. Mais, cette information ne serait disponible qu'après que l'établissement de liaison TLS ait été effectué, c'est-à-dire pas encore dans le HostnameVerifier parce que cela est appelé pendant l'établissement de liaison TLS. Si l'équilibreur de charge n'est pas le point de terminaison de la connexion TLS mais transmet simplement la connexion TCP au serveur, vous ne pouvez toujours pas obtenir l'adresse IP de la connexion, mais vous pouvez distinguer les serveurs s'ils utilisent des certificats différents. Le contenu du certificat doit être accessible dans HostnameVerifier.

+0

Merci pour la réponse et une explication claire. Cela a du sens. Je vous remercie. – Vishwa