2012-07-20 7 views
0

핸드 셰이크를 사용하지 않고 인증서 데이터를 얻을 수 있다는 것을 읽었습니다 & 시간을 줄이면 바람직합니다. 아래 코드는 인증서 정보를 가져 오는 목적이지만 코드는 ssl hanndshake를 완료합니다. 네트워크 프로그래밍 전문가라면 저에게 어떻게하면 ssl 핸드 셰이크를 완료하지 않고도 원격 호스트의 인증서 정보를 얻을 수 있다고 말할 수 있습니까?어떻게하면 SSL 핸드 셰이크를 완료하지 않고 인증서를 얻을 수 있습니까?

package com.kushal.security; 

import java.security.cert.Certificate; 

import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.SSLSocket; 
import javax.net.ssl.SSLSocketFactory; 

public class JavaSSLCertificate { 

public static void main(String[] argv) throws Exception { 

int port = 443; 

String hostname = "gmail.com"; 

SSLSocketFactory factory = HttpsURLConnection 
.getDefaultSSLSocketFactory(); 

System.out.println("Creating a SSL Socket For "+hostname+" on port "+port); 

SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port); 

socket.startHandshake(); 
System.out.println("Handshaking Complete"); 

Certificate[] serverCerts = socket.getSession().getPeerCertificates(); 
System.out.println("Retreived Server's Certificate Chain"); 

System.out.println(serverCerts.length + "Certifcates Found\n\n\n"); 
for (int i = 0; i < serverCerts.length; i++) { 
Certificate myCert = serverCerts[i]; 
System.out.println("====Certificate:" + (i+1) + "===="); 
System.out.println("-Public Key-\n" + myCert.getPublicKey()); 
System.out.println("-Certificate Type-\n " + myCert.getType()); 

System.out.println(); 
} 

socket.close(); 
} 

} 
+0

그럼 키 교환이 아닌 인증서 만 있으면됩니까? SSL 핸드 셰이크에는 언제든지 걸릴 수있는 것이별로 없기 때문입니다. –

+0

나는 당신이 의미하는 것을 얻지 못했습니다. 둘 다 필요할 수 있습니다. –

+0

둘 다 필요하다면 SSL 핸드 셰이크 전체가 필수적입니다. 그래서 "시간을 줄이는 것이 바람직합니다"* 어디에서 왔는지 모르겠습니다. –

답변

-1

인증서 교환은 핸드 셰이크의 일부입니다. 핸드 셰이크를 기다리지 않고 인증서를 얻을 수 있다는 것을 어디에서 읽었는지 모르겠지만 JSSE에서는 적어도 사실이 아닙니다. 나에게도 의미가 없다.

관련 문제