호스트 이름을 입력으로 사용하여 해당 호스트의 인증서를 추출하는 함수에서 다음 코드를 받았습니다. 원격 호스트의 IP 주소를 표시해야합니다. ".getInetAdress()"를 사용하여 원격 호스트의 IP를 반환했습니다 : http://docs.oracle.com/javase/1.5.0/docs/api/java/net/Socket.html#getInetAddress(). 나는이 프로그램을 실행하면.getInetAddress()의 반환 값이 실제 IP가 아닙니다.
SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();
System.out.println("Starting SSL Socket For "+hostname+" port "+port);
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port);
//To get the IP for the remote host. Format: (domain name/IP),
//then manually covert it to string
String remoteIP=socket.getInetAddress().toString();
System.out.println("Remote address = " + remoteIP);
socket.startHandshake();
Certificate[] serverCerts = socket.getSession().getPeerCertificates();
, 예를 들어, 호스트는 "www.tesco.com"은 ".getInetAddress()." 이 IP를 나에게 돌려 보낸다 : 88.221.94.232. 브라우저에이 IP를 입력하려고하면 URL에 'https : //'를 추가 한 후에도 '잘못된 URL'이 표시됩니다. 반면, "tesco.com"에 ping을 시도하면 다른 IP 주소 인 "212.140.185.177"이 표시되고 브라우저에 입력하면 tesco의 웹 페이지가 열립니다.
내가 뭘 잘못 알고 있니? 소켓을 사용하지 않고 gethostAddress & getHostAddress() 이외의 다른 방법으로 원격 호스트의 IP 주소를 가져 오는 중입니까?
그래서 저는 여러분에게 맞았는지 확인하기 위해 "88.221.94.232"는 tesco뿐만 아니라 많은 사이트를 호스트하는 호스팅 서버입니다. SSL을 지원하는 서버 (tesco 및 amazon 등의 트랜잭션 중에 보안 통신을 보장하는 인증서를 사용자에게 제공하는 서버)의 인증서를 추출하려는 경우 이는 내 생각에 또 다른 질문입니다. 자세한 내용은 내 코드를 참조하십시오. "www.tesco.com"이 아닌 "tesco.com"? –
또한 가능한 경우 plz, 내 tesco 예제뿐만 아니라 일반적인 대답이 필요합니다. 인증서를 추출하려면 어떤 호스트 이름을 사용해야합니까? www가 맞습니까? 또는없이? –
예, 호스팅 서버입니다 (실제로는 여러 가지면에서 Akamai입니다. 전세계에 서버가 있습니다.). 웹 사이트 "tesco.com"에 대한 인증서를 원하면'tesco.com '을 사용하십시오.웹 사이트 "www.tesco.com"에 대한 인증서를 원하면 'www.tesco.com'을 사용하십시오. 웹 사이트는 인증서가있는 것입니다. 원하는 인증서가있는 사이트를 사용하십시오. –