2017-02-16 3 views
1

HostnameVerifier에서 구현 한 사용자 지정 확인 메서드가 있습니다.사용자 지정 HostnameVerifier에서 서버 IP 주소를 얻는 방법

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

여기 호스트 이름 내 경우에는 (나에게 peerCert 같은 모든 피어 값을 제공 나에게 클라이언트 (IP 주소 또는 DNS 이름 중 하나)과 있는 SSLSession에 연결되는 URL에 값 선물을 제공합니다 서버 인증서) 및 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 핸드 셰이크가 완료된 후에 만 ​​사용할 수 있습니다. 즉, TLS 핸드 셰이크 중에 호출되기 때문에 HostnameVerifier에 아직 없습니다.

부하 분산 장치가 TLS 연결의 끝점이 아니고 TCP 연결을 변경하지 않고 서버에 전달한 경우에도 연결에서 IP 주소를 가져올 수는 없지만 서버가 다른 인증서를 사용하는 경우 서버를 구별 할 수 있습니다. HostnameVerifier에서 인증서의 내용에 액세스 할 수 있어야합니다.

+0

답변과 명확한 설명에 감사드립니다. 이것은 이해가된다. 고맙습니다. – Vishwa