2012-07-20 59 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握手中沒有其他任何事情可以隨時使用。 – 2012-07-20 17:20:29

+0

我沒有明白你的意思。我可能需要兩者。 – 2012-07-20 19:46:22

+0

如果您同時需要,那實質上就是整個SSL握手。所以我不知道在哪裏*「這是可取的減少時間」*來自 – 2012-07-20 20:29:11

回答

-1

證書交換是握手的一部分。我不知道你在哪裏閱讀,你可以在不等待握手的情況下獲得證書,但至少在JSSE中是這樣。這對我來說甚至沒有意義。