2012-07-20 56 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中是这样。这对我来说甚至没有意义。