Ensure that you have installed and using BouncyCastle as a certificate generator. Newer versions of Android will reject certificates with more than two years of validity, and currently, only the BouncyCastle generator will output a compatible certificate for Android devices. Learn more about certificate generators and how to install and enable BouncyCastle here....
The tutorial requires administrative privileges for the current user (on the Android device) to install the Fiddler certificate authority (CA) and to set manual proxy. Once the steps are executed, you can immediately capture HTTPS traffic from the remote Android device.
Install the downloaded Fiddler CA in the device certificate storage. The settings location depends on the Android version but is usually under Settings > Security > Encryption and Credentials > Install a certificate > CA Certificate.
Ensure that the Fiddler Everywhere CA installs as a user certificate in the Settings > Security > Encryption & Credentials > User tab.
Most production-ready applications explicitly restrict user-installed certificates' usage, which means that Fiddler Everywhere won't complete the TLS handshake and decrypt their HTTPS traffic. However, you can capture traffic from applications in active development, which means you have access to the code of that application.
Apart from that, it seems that on your side the Fiddler certificate is not recognized as root CA even on Chrome so it is likely that you are not successfully adding it as a system certificate. Have you explicitly mounted the system directory and then rebooted the device (see examples and details here -android-user-installed-certificates-to-system-ca-store/ and here )?
As a disclaimer, I have not used a rooted phone and can't confirm the exact steps to make a user certificate a system one. Supporting rooted devices is not a feature that is officially supported by Fiddler Classic, but that said if the certificate is properly installed as a system one, the proxy will use it so you should be able to capture and decrypt HTTPS traffic. Being able to capture only the CONNECT requests indicates that you are capturing only non-secure HTTP traffic.
It is hard to say what might be causing your issue, apart from the certificate is not recognized. So again it is either that the application is expecting a specific certificate or that the certificate is not properly/entirely installed in the OS (Android).
Just for my understanding of the latest posts: There is currently no other way to get Fiddler running (for https traffic) than implementing the changes which are described here -developers.googleblog.com/2016/07/changes-to-trusted-certificate.html?
I have followed instructions on how to add fiddler certificate on android emulator, using both nox and memu emulators, as well as my android phone running marshmallow, I set the WiFi proxy to point to my PC over the local network, when I open a website using a web browser, things work fine, I receive the warning, I choose to proceed and the connection is successfully tunneled and decrypted using fiddler.
But, when I try to use other apps, connections fail! I see the tunnel connections, and then connection fails. My bet is, it's due to the invalid HTTPS certificate, so my question is, is there a way for me to install fiddler to the trusted authorities so connecting to it will go through without the warning? So I can finally debug HTTPS traffic from and to those apps.
The main problem is that if you install the Fiddler root CA certificate in Android it is marked as user certificate (not system certificate). And unless explicitly configured in an app those user certificates are not trusted.
One of those rare apps that respect user CA certificates is Chrome. So using Chrome for testing if the proxy and the installed root CA certificate works is a bad idea, as it may only work in Chrome but not for apps.
Note that some apps further use certificate pinning (leaf or root CA pinning). Therefore even if the Fiddler root CA certificate is installed as system certificate the app won't trust this certificate as it fails on the certificate pinning.
Certificate pinning is also a web site feature, hence some sites save a certificate hash in the web browser cache that pins the site to a certain certificate. In such a case clearing the browser cache is usually removing those pinning data.
Alternatively you can install Magisk + Edxposed + TrustMeAlready Xposed module. This allows to disable certificate checking system wide - WARNING: this eliminates the security of SSL/TLS against active attacks, for all apps on the phone. Therefore only do this on a device you use just for hacking!
Also possible is installing and run Frida-Server on the device and hook into the app you are interested to modify the SSL/TLS certificate checking at run-time. AFAIK the Frida based framework Objection has some scripts to do so.
To let the app trust user certificates you have to modify network_security_config.xml (see e.g. here) included in the app. You can use apktool to decompile/recompile the app. Don't forget to re-sign the recompiled/repackaged app e.g. using apksigner from Android SDK.
In Fiddler:
* Make sure the "Decrypt HTTPS traffic" is set to "...from all processes".
* If you need to change this setting, make sure to restart Fiddler after saving the settings.
* Make sure that the fiddler certificate is installed on the device.
* DO NOT use the proxy settings found under Settings -> Proxy in the emulator, this does not work with Fiddler for https traffic (http traffic works fine).
* Inside Android, open Settings -> More... -> Cellular networks -> Access Point Names -> Press + to add a new name (or edit the default if possible)
* Provide any value under Name and APN. Input your local network IP or 10.0.2.2 under Proxy and specify the fiddler port under port.
* Tap the three dot meny and save.
* Go back to the APN list and make sure your apn is selected (tap the radio button to select it)
* Turn on flight mode and then disable it again to enable the new settings
The command does work with other certificates that I extracted from Android at /system/etc/security/cacerts/00673b5b.0. which returns 00673b5b.
I opened both certs in notepad to compare them and notice that the cert from Android is readable format and has a PEM section, while FiddlerRoot.cer is binary and no PEM, so it may have something to do.
The reason I need the cert hash is because I think Android requires certificate files to be named with the hash and the ".0" extension: [CertHash].0
and installing the cert in Android in the "user" store won't work for me, it has to be in the "system" store.
Converted FiddlerRoot certificate from the DER format to PEM (begins with the BEGIN CERTIFICATE line) and stored it to the phone file system: /system/etc/security/cacerts/c8450d0d.0 with correct rights:
I am trying to capture HTTPS traffic from my rooted Android device (4.4.4) to analyze an undocumented protocol of an app. I've set up my Fiddler as a proxy and enabled HTTPS sniffing. I've installed the Fiddler's generated root certificate on my device. I've set up my proxy for my Wifi on my Android device.
It appears to be specific to that app. I was successfully able to sniff all the other apps. That particular app probably uses SSL pinning: it checks for certificate within itself and doesn't allow fake certificates even if it's trusted by the device.
Fiddler stopped handling https traffic on both my machine browsers and the device. After reinstalling/retrusting Fiddler certificates, my machine browser starting working again with https, but the device remained broken.
In order to get the device working again, I had to explicitly trust the new certificate on the device, by using the device's browser to open the site http://:8888/FiddlerRoot.cer, and then trusting the certificate.
You can use the method below to quickly identify the problems that will occur in the android application development phase. It was very useful for me. I think it will be useful for you.
Fiddler Download :
QuickExec is functionality available only in Fiddler Classic (which is the classic tool for Windows only). With Fiddler Everywhere (for macOS, Linux, and Windows), the default port is 8866. Use this documentation article for detailed steps on how to configure your Android device alongside Fiddler Everywhere: -everywhere/traffic/configure-android
Unfortunately for Android, the setup can vary from device to device. And on some devices, the OEM has made modifications to the OS to disallow user defined root certificates. The Sony Xperia is one we had particular trouble with at work. The basic steps (regardless of the platform) are:
Name the certificate something useful, make sure its set to VPN and apps for the credential usage and then tap OK. Once you tap OK, you may get some additional prompts from Android about a PIN or something, every Android device is different.
I'm trying to debug a problem with a customer's map service where we see intermittend errors in displaying the map. To get an idea as to why the map is sometimes not loading, I wanted to sniff the traffic using Fiddler. As the service is an SSL-secured service, I am using Fiddler's own certificate to intercept the connection and act as my own man-in-the-middle.
I am using Fiddler, and I have to insert a CA Cert to decrypt the SSL certificate coming out of my device. My device running Android 13 is rooted, and when I installed my cert, it went into the user's section (as expected).
If that doesn't work, check if you have a /apex/com.android.conscrypt/cacerts directory. If so, you have the Android 14 version of Conscrypt installed, and there's some extra steps. See the 2nd article above for full details, but in short: you need to use nsenter to add a bind mount for that /system/etc/security/cacerts path into the APEX path for every single running app process on the machine, including the Zygote/Zygote64 processes (which launch new processes in future, who will inherit this setting). That looks like this:
35fe9a5643