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();
}
}
所以你只是想要證書而不是密鑰交換?因爲SSL握手中沒有其他任何事情可以隨時使用。 – 2012-07-20 17:20:29
我沒有明白你的意思。我可能需要兩者。 – 2012-07-20 19:46:22
如果您同時需要,那實質上就是整個SSL握手。所以我不知道在哪裏*「這是可取的減少時間」*來自 – 2012-07-20 20:29:11