Android 7 hat einige Änderungen an der Art und Weise vorgenommen, wie Zertifikate behandelt werden ( http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html ), und irgendwie kann ich meinen Charles-Proxy nicht mehr zum Laufen bringen.
Meine network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Ich laufe im Debug-Modus. Aber egal was, ich verstehe javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
.
Unnötig zu erwähnen, dass ich ein pfx
Zertifikat von installiert habe Settings -> Security -> Install from storage
. Das Zertifikat wird in User Credentials
aber nicht in angezeigt Trusted credentials -> User
. Auf meinem Lollipop-Gerät sind die Zertifikate dort aufgelistet.
Ich verwende okhttp3 als HTTP-Bibliothek.
Irgendeine Idee, was ich falsch mache?
quelle
user
einen in das<base-config>
und wenn das Änderungen Angelegenheiten sehen. Es sollte nicht, aber es wird nur einen Moment dauern, um es zu versuchen.Settings -> Security -> Install from storage
Antworten:
Basierend auf dem Kommentar-Thread zur Fehlerbehebung für das OP besteht die Antwort darin, nur das CA-Zertifikat des Proxys als vertrauenswürdig zu installieren, nicht dessen Zertifikat + privater Schlüssel.
Das Problem wurde durch zwei Faktoren verursacht:
Installieren nicht nur des CA-Zertifikats des MiTM-Proxys, sondern auch seines privaten Schlüssels (wodurch VPN-Apps auf dem Gerät den MiTM-Netzwerkverkehr von anderen Apps entschlüsseln können). Sie benötigen den privaten Schlüssel des MiTM-Proxys nicht auf dem Gerät.
Android Nougat Änderung des
Settings -> Security -> Install from storage
Ablaufverhaltens für Dateien, die neben Zertifikaten auch einen privaten Schlüssel enthalten. Diese Verhaltensänderung entlarvte das obige Problem.Vor Nougat hat der
Settings -> Security -> Install from storage
Datenfluss für Dateien, die zusätzlich zu den Zertifikaten einen privaten Schlüssel enthalten, die Zertifikate fälschlicherweise als vertrauenswürdig für die Serverauthentifizierung installiert (z. B. HTTPS, TLS, wodurch Ihr MiTM erfolgreich ist) und zusätzlich korrekt als Client-Zertifikate installiert Authentifizierung dieses Android-Geräts bei Servern. In Nougat wurde der Fehler behoben und diese Zertifikate werden nicht mehr als vertrauenswürdig für die Serverauthentifizierung installiert. Dadurch wird verhindert, dass Anmeldeinformationen für die Clientauthentifizierung die Sicherheit von Verbindungen zu Servern beeinträchtigen (schwächen). In Ihrem Szenario verhindert dies, dass Ihr MiTM erfolgreich ist.Erschwerend kommt hinzu, dass der
Settings -> Security -> Install from storage
Benutzer nicht explizit angeben kann, ob er einen Clientauthentifizierungsnachweis (privater Schlüssel + Zertifikatskette) oder einen Vertrauensanker für die Serverauthentifizierung installiert (nur ein CA-Zertifikat - kein privater Schlüssel erforderlich). . InfolgedessenSettings -> Security -> Install from storage
errät der Ablauf, ob es sich um einen Client / Benutzer-Authentifizierungsnachweis oder einen Serverauthentifizierungs-Vertrauensanker handelt, indem angenommen wird, dass es sich bei Angabe eines privaten Schlüssels um einen Client / Benutzer-Authentifizierungsnachweis handeln muss. In Ihrem Fall wurde fälschlicherweise davon ausgegangen, dass Sie einen Client- / Benutzerauthentifizierungsnachweis anstelle eines Vertrauensankers für die Serverauthentifizierung installieren.PS In Bezug auf Ihre Netzwerksicherheitskonfiguration sollten Sie die App wahrscheinlich so konfigurieren, dass sie auch "System" -Vertrauensankern im Debug-Modus vertraut (Abschnitt Debug-Overrides). Andernfalls funktionieren Debug-Builds der App nur, wenn die Verbindungen von einem Proxy über MiTM hergestellt werden, dessen CA-Zertifikat auf dem Android-Gerät als vertrauenswürdig installiert ist.
quelle
Trust anchors specified in debug-overrides are added to all other configurations
. Ich hatte also den Eindruck, dass es zu 'base-config' hinzugefügt und nicht vollständig ersetzt wurde?Die Lösung besteht darin , keine .p12-Datei zu verwenden . Navigieren Sie einfach mit Chrome (mit konfiguriertem Proxy über WLAN) zu http://charlesproxy.com/getssl und installieren Sie die heruntergeladene .pem-Datei .
Ich hatte genau das gleiche Problem auf meinem Nexus 5X mit Android 7.0. Es wurde zuvor .p12 aus Charles 3.11.5 exportiert (Hilfe-> SSL-Proxy-> Charles-Stammzertifikat und privaten Schlüssel exportieren). Als ich versuchte, .p12 vom Telefon aus zu installieren (Einstellungen-> Sicherheit-> Vom Speicher installieren), wird es nur unter "Benutzeranmeldeinformationen" und niemals unter "Vertrauenswürdige Anmeldeinformationen" angezeigt, und natürlich funktionierte SSL mit Charles-Proxy nicht.
Das gesamte "How-to" für Android 7.0 wäre wie folgt:
android:networkSecurityConfig="@xml/network_security_config"
in<application>
Manifest.xml einPS Überprüfen Sie Datum und Uhrzeit auf dem Gerät. Es sollte richtig sein.
quelle
Ich arbeite mit Android 7.1.1. So richte ich auf meinem Gerät (OnePlus One) ein - ohne Änderung des Manifests (ich habe API 21 für meine App ausgewählt):
In Charles Proxy:
Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser
. In diesem Schritt erhalten Sie die Proxy-IP und die Portnummer sowie den Link, über den Sie das Proxy-SSL von charles herunterladen sollten.Auf Ihrem Telefon:
Wifi Settings > Modify Network > Advanced Options
. Set - ProxyManual
und geben Sie die IP und Port Nummer , die Sie von Charles in empfangeneProxy hostname
undProxy port
jeweils.(OPTIONAL) Möglicherweise können Sie auf den zuvor von Charles bereitgestellten Link chls.pro/ssl zugreifen oder nicht . Auf meinem Gerät wurde ich immer benachrichtigt, dass ich keine Netzwerkverbindung hatte. Ich habe charlesproxy.com zum
Bypass proxy for
Feld hinzugefügt .Gehen Sie in Ihrem Browser zu dem Link in Schritt 3 und laden Sie das erforderliche Zertifikat herunter (wenn es in Chrome nicht funktioniert, laden Sie den Dolphin Browser herunter). Sie können Ihr Zertifikat mit einem beliebigen Namen benennen.
Zurück zu Charles Proxy:
Allow
oderDeny
Ihr Telefon aufgefordert werden, den Proxy zu verwenden, wenn Ihre Einstellungen standardmäßig so sind, dass Sie zur Eingabe von Remoteverbindungen aufgefordert werden.Sie können jetzt Charles auf Nougat 7.1.1 verwenden.
quelle