Umgang mit ungültigen SSL-Zertifikaten mit Apache HttpClient
Beim Herstellen sicherer HTTP-Verbindungen über SSL mit Apache HttpClient kann ein Fehler auftreten, der auf eine Ungültigkeit hinweist SSL-Zertifikat. Dieser Fehler tritt auf, wenn der Remote-Server ein Zertifikat vorlegt, dem das Java Trust Managerset nicht vertraut.
Mögliche Lösungen:
Um dieses Problem zu beheben, gibt es mehrere Ansätze Sie können Folgendes tun:
SSLContext mit einem akzeptierenden TrustManager konfigurieren:
Erstellen Sie einen benutzerdefinierten TrustManager, der jedes Zertifikat akzeptiert, unabhängig von seiner Gültigkeit. Dieser Ansatz wird für Produktionsumgebungen nicht empfohlen, da er die Sicherheit von SSL-Verbindungen untergräbt.
<code class="java">// Configure SSLContext with a TrustManager that accepts any certificate SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(null, new TrustManager[] {new DefaultTrustManager()}, new SecureRandom()); SSLContext.setDefault(ctx);</code>
Beispielcode:
Das folgende Codebeispiel zeigt, wie ein SSLContext erstellt wird, der jedes Zertifikat akzeptiert, wie in der ersten Lösung vorgeschlagen :
<code class="java">import java.net.URL; import java.security.SecureRandom; 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://remote-server-address"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setHostnameVerifier(HostnameVerifier.ALL); // temporarily disable strict hostname verification System.out.println(conn.getResponseCode()); 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; } } }</code>
Hinweis: Denken Sie daran, dass die Verwendung eines solchen akzeptierenden TrustManagers nur zu Test- und Debugzwecken in Betracht gezogen und nicht in Produktionsumgebungen verwendet werden sollte.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit ungültigen SSL-Zertifikaten mit Apache HttpClient um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!