0

ハンドシェイクと競合せずに証明書データを取得できることを読みましたが、これは時間を短縮するために望ましいことです。以下のコードは、証明書情報を取得する目的を果たしますが、コードは 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();
}

}
4

1 に答える 1

-1

証明書交換はハンドシェイクの一部です。ハンドシェイクを待たずに証明書を取得できることをどこで読んだかはわかりませんが、少なくともJSSEではそうではありません。それは私には意味がありません。

于 2012-07-20T19:36:54.953 に答える