Wie überprüft man das Ablaufdatum des SSL-Zertifikats programmatisch in Java?

Muss ich extrahieren Ablaufdatum von SSL-Zertifikat auf der Webseite in Java unterstützen sollte,sowohl
vertrauenswürdigen und selbst-signiertes Zertifikat,wie z.B.:
1.trusted
https://github.com
2.self-signed
https://mms.nw.ru/

Ich bereits kopieren code:

import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class SSLTest {

    public static void main(String [] args) throws Exception {
        //configure the SSLContext with a TrustManager
        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
        SSLContext.setDefault(ctx);

        URL url = new URL("https://github.com");//https://mms.nw.ru
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                return true;
            }
        });
        System.out.println(conn.getResponseCode());
        Certificate[] certs = conn.getServerCertificates();
        for (Certificate cert :certs){
            System.out.println(cert.getType());
            System.out.println(cert);
        }

        conn.disconnect();
    }

    private static class DefaultTrustManager implements X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
}

Die Fragen:

  1. Wie zum Parsen der Ablauf Datum aus dem Zertifikat, in meinem code die toString() hat das Datum Ausgabe,aber es ist schwer zu analysieren.

  2. Wie bestimmen Sie die Zertifikat-Kette, zB die github-Zertifikat mit Ketten 3, wie habe ich wissen, welches Zertifikat zu bekommen, das Ablaufdatum aus?

InformationsquelleAutor der Frage Simon Wang | 2012-10-19

Schreibe einen Kommentar