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:
-
Wie zum Parsen der Ablauf Datum aus dem Zertifikat, in meinem code die toString() hat das Datum Ausgabe,aber es ist schwer zu analysieren.
-
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfe es ein
X509Certificate
- und call -getNotAfter()
.Du hast es. Das ist es, was die
Certificate[]
array ist, so wie es in der Javadoc.Lesen Sie die Javadoc. "Die peer-eigenes Zertifikat an Erster Stelle, gefolgt von beliebigen Zertifizierungsstellen".
Allerdings weiß ich nicht, warum Sie das tun. Java sollte bereits alles für Sie tun.
Bitte wegwerfen, die unsicher und falsch TrustManager Umsetzung. Der richtige Umgang mit selbst-signierte Zertifikate zu importieren, die Sie in der client-truststore. Bitte auch wegwerfen Ihre unsichere HostnameVerifier, und den Standardwert verwenden oder einen sicheren. Warum verwenden Sie HTTPS, wenn Sie nicht wollen, dass es auch sicher ist?
InformationsquelleAutor der Antwort EJP
Stellen Sie sicher, Sie hängen Begin/End-Zeilen auf PEM-format, sonst in java nicht verstehen.
InformationsquelleAutor der Antwort Tapolo