2017-02-16 147 views
1

我有一個從HostnameVerifier實現的自定義驗證方法。如何獲得自定義HostnameVerifier中的服務器IP地址

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

主機名這裏讓我出現在該客戶端連接到(或IP地址或DNS名稱)和的SSLSession URL中的價值帶給我喜歡peerCert所有同行值(在我的情況服務器證書)和peerCertChain。它也具有來自URL的值的peerHost。

我想獲取我的客戶端連接到的服務器IP地址。 服務器(2個)在負載平衡器之後是。因此,我的客戶端URL在調用服務器時將始終具有負載均衡器IP。

hostname 
peerHost=session.getPeerHost() 

這兩個都給我從URL的值(這是loadBalancer IP)。

如何獲取服務器的IP地址這是我的自定義HostnameVerifier中的負載均衡器後面?

SSLSession已獲得服務器證書..我如何獲得服務器IP地址?

在這個大加讚賞

回答

2

這是不可能得到來自背後的連接負載均衡服務器的IP地址,因爲連接到負載平衡器,而不是服務器的任何建議/幫助。您可以訪問服務器地址的唯一方法是負載均衡器會告訴您其地址。

假設負載均衡器是TLS連接的端點,並且可以修改TLS內部的HTTP通信,那麼可以在響應中添加自定義HTTP標頭。但是,這些信息只有在TLS握手完成後纔可用,即尚未存在於HostnameVerifier中,因爲在TLS握手過程中調用了該信息。

如果負載均衡器不是TLS連接的端點,而只是將TCP連接不變地轉發到服務器,您仍然無法從連接獲取IP地址,但是如果服務器使用不同的證書,您可能會區分這些服務器。在HostnameVerifier中可以訪問證書的內容。

+0

感謝您的回覆和明確的解釋。這確實有道理。謝謝。 – Vishwa