2017-02-16 8 views
1

HostnameVerifierから実装されたカスタム検証メソッドがあります。カスタムHostnameVerifierでサーバのIPアドレスを取得する方法

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

ここホスト名は私のクライアントが(IPアドレスまたはDNS名のいずれか)に接続するにURL内に存在価値を与え、いるSSLSessionは、私の場合には(私peerCertのようなすべてのピアの値を与えますサーバー証明書)とpeerCertChain。 URLからの値であるpeerHostも持っています。

クライアントが接続しているサーバーのIPアドレスを取得しようとしています。 サーバー(2桁の番号)は、の後ろにです。したがって、クライアントURLはサーバーを起動している間は常にロード・バランサIPを持ちます。

hostname 
peerHost=session.getPeerHost() 

これらは両方とも、URLからの値(loadBalancer IP)を与えてくれます。

私のカスタムHostnameVerifierのロードバランサの背後にあるサーバのIPアドレスを取得するにはどうすればよいですか?

SSLSessionにはサーバー証明書があります。どのようにサーバーのIPアドレスを取得できますか?接続がロードバランサにではなく、サーバーにあるので

この感謝

答えて

2

上の任意の提案/ヘルプ接続からロードバランサの背後にあるサーバーのIPアドレスを取得することは不可能です。サーバアドレスに到達する唯一の方法は、ロードバランサがあなたにアドレスを伝えるかどうかです。

ロードバランサがTLS接続のエンドポイントであり、TLS内のHTTPトラフィックを変更できると仮定すると、レスポンスにカスタムHTTPヘッダーを追加することができます。しかし、この情報は、TLSハンドシェイクが完了した後、すなわちHostnameVerifierにまだない場合にのみ利用可能となる。なぜなら、これはTLSハンドシェイク中に呼び出されるからである。

ロードバランサがTLS接続のエンドポイントではなく、TCP接続をそのままサーバーに転送するだけでは、接続からIPアドレスを取得できませんが、異なる証明書を使用する場合はサーバーを区別できます。 HostnameVerifierで証明書の内容にアクセスできるようにする必要があります。

+0

応答と明確な説明に感謝します。これは理にかなっています。ありがとうございました。 – Vishwa

関連する問題