Override onReceivedSslError funktioniert nicht mit der Android KitKat-Webansicht

9

Ich kann die SSL-Fehler umgehen, wenn ich auf eine https-URL mit nicht vertrauenswürdigem Zertifikat mit folgendem Code mit der WebView Version KitKat

zugreife %Vor%

aber es funktioniert nicht für KitKat Browser. Irgendwelche Ideen, um es zu lösen?

    
Chatura Dilan 18.03.2014, 09:55
quelle

3 Antworten

3

Ich bin kürzlich auf dieses Problem gestoßen, das ist nicht dokumentiert, aber es scheint, dass die Aufrufmethode onReceivedSslError auf Android 4.4 KitKat vom Typ des SSL-Fehlers abhängt. Ich habe diese zwei Fälle überprüft:

  • Wenn der SSL-Fehler auf ein selbstsigniertes Serverzertifikat zurückzuführen ist, wird die onReceivedSslError-Methode in Android KitKat 4.4 wie in älteren Versionen aufgerufen.

  • Wenn jedoch die SSL-Fehlerursache eine ungültige Zertifikatskette ist (LogCat mit der Meldung: "Fehler beim Überprüfen der Zertifikatskette, Fehler: java.security.cert.CertPathValidatorException: Vertrauensanker für Zertifizierungspfad nicht gefunden. ", dann wird onReceivedSslError nicht in KitKat aufgerufen, wie es in älteren Android-Versionen genannt wurde, und daher kann der Fehler in 4.4 nicht ignoriert oder umgangen werden. Das war mein Fall, und ich weiß nicht, ob das ein Fehler ist oder absichtlich um MITM-Angriffe zu verhindern, aber ich habe keinen programmatischen Weg gefunden, um dies zu umgehen.

Das zugrunde liegende Problem für mich war, dass der Webserver nicht die vollständige Zertifikatskette, sondern nur das letzte Zertifikat verfügbar gemacht hat und es dem Gerät überlassen hat, die gesamte Kette zu validieren, vorausgesetzt, dass alle Zertifikate im Geräte-Zertifikatsspeicher gespeichert sind , was bei Android-Geräten nicht der Fall war. Sie können sicherstellen, dass dies auch Ihr Problem ist, entweder durch:

a) Überprüfung der Zertifikatskette mit einer Online-Zertifikatsprüfung wie: Ссылка

b) Mit openssl die erhaltene Zertifikatskette verifizieren: openssl s_client -showcerts -connect: 443 Sie können dort die Zertifikatskette sehen, die zwei oder mehr Zertifikate enthalten sollte, und wenn das Ergebnis mit etwas wie folgt endet: Überprüfen Sie den Rückgabecode: 21 (das erste Zertifikat konnte nicht überprüft werden), Sie haben wahrscheinlich ein ähnliches Problem wie ich.

Die Lösung bestand darin, die Webserver-Konfiguration zu korrigieren, damit der Server die vollständige Zertifikatskette den Hosts zugänglich macht.

    
Miguel 21.08.2014 09:26
quelle
1

Ihre App verhält sich unter Android 4.4 möglicherweise anders, insbesondere wenn Sie die App targetSdkVersion bis" 19 "oder höher.

Der Code, der der Klasse WebView und den zugehörigen APIs zugrunde liegt, wurde aktualisiert und basiert jetzt auf a moderner Schnappschuss des Chromium-Quellcodes.

Dies bringt eine Reihe von Verbesserungen für die Leistung, Unterstützung für neue HTML5-Funktionen und Unterstützung für das Remote-Debugging von WebView Inhalt. Der Umfang dieses Upgrades bedeutet, dass Ihr Verhalten in einigen Fällen beeinträchtigt sein kann, wenn Ihre Anwendung WebView verwendet. Obwohl bekannte Verhaltensänderungen dokumentiert sind und sich meist nur auf Ihre App auswirken, wenn Sie die targetSdkVersion der App aktualisieren bis "19" oder höher - das neue WebView arbeitet im "Quirks-Modus", um einige ältere Funktionen in Apps bereitzustellen, die auf API-Stufe 18 oder niedriger abzielen - es ist möglich, dass Ihre App von unbekannten Verhaltensweisen der vorherigen Version von WebView abhängt .

Wenn Ihre vorhandene App also WebView verwendet, sollten Sie so schnell wie möglich auf Android 4.4 testen und Migrieren nachlesen an WebView in Android 4.4 , um Informationen darüber zu erhalten, wie Ihre App betroffen sein könnte, wenn Sie Ihre targetSdkVersion auf "19" oder höher aktualisieren.

Quelle

    
Arvind 09.04.2014 06:59
quelle
-3

Haben Sie so etwas versucht?

%Vor%     
TooShyToAsk 10.04.2014 02:06
quelle