Heim >Java >javaLernprogramm >Wie behebe ich den Fehler „SSL-Ausnahme: Nicht vertrauenswürdiges Serverzertifikat' in Android-HTTPS-POST-Anfragen?

Wie behebe ich den Fehler „SSL-Ausnahme: Nicht vertrauenswürdiges Serverzertifikat' in Android-HTTPS-POST-Anfragen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-14 01:50:09667Durchsuche

How to Resolve

Https-Verbindung Android

Beim Versuch, HTTPS-POST-Anfragen in Android durchzuführen, tritt der Fehler „SSL-Ausnahme: Nicht vertrauenswürdiges Serverzertifikat“ auf. Obwohl HTTPS-Aufrufe ordnungsgemäß unter HTTP funktionieren, schlagen sie fehl.

Lösung:

Um die Überprüfung des Serverzertifikats zu umgehen und HTTPS-Verbindungen herzustellen, können ein benutzerdefinierter Trust Manager und Hostname Verifier implementiert werden wie folgt:

public static void trustAllHosts() {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new java.security.cert.X509Certificate[]{};
        }

        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
    }};

    // Install the all-trusting trust manager
    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

// always verify the host - dont check for certificate
final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

Um diese Einstellungen zu verwenden, ändern Sie Ihren HTTPS-Verbindungs-Setup-Code wie folgt:

HttpURLConnection http = null;

if (url.getProtocol().toLowerCase().equals("https")) {
    trustAllHosts();
    HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
    https.setHostnameVerifier(DO_NOT_VERIFY);
    http = https;
} else {
    http = (HttpURLConnection) url.openConnection();
}

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „SSL-Ausnahme: Nicht vertrauenswürdiges Serverzertifikat' in Android-HTTPS-POST-Anfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn