Why Charles?
Charles Proxy is an awesome proxy with a nice interface for OSX.
I mean, you can:
- debug all your connection that goes through your mac
- act as a SOCKS/HTTP proxy (so you can configure your phone to this proxy)
- support SSL connections (Charles plays the man-in-the-middle)
- perform rewrite on the fly (change headers, change URL, response)
- map request to your server (instead of using a remote server)
- throttle networks
- see request in JSON, or protobuff with nice UI
- spoof DNS
- …
Nothing Owasp ZAP or other free proxy can’t do but with a nicer interface.
Last but not least, the icon is just awesome.
Hence, I did buy Charles and so far, I’m happy with it. That was a small disclaimer but I encourage checking that out.
How to install Charles?
iOS
You should enable proxy in your settings:
Then you should head up to https://chls.pro/ssl and install the profile.
Last but not least, you should trust your new profile, since iOS 10.3.
Android
First you should enable proxy in Android by going to your WIFI and editing it:
Then you should head up to https://chls.pro/ssl and install the certificates under for the category “wifi”
Android 7+
Since Android, that is enough to debug website in chrome mobile but not any other app.
So instead of going to https://chls.pro/ssl, you should provide an appropriate network config:
In android manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
then under res/@xml
:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" />
<!-- the certificates that you want to include -->
<certificates src="@raw/dev-1" />
<certificates src="@raw/dev-2" />
</trust-anchors>
</base-config>
</network-security-config>
and include the certificate public part (in *.pem
format) inside res/@raw
:
Advantages:
- you don’t include security flow as only the dev have their private key
- the certificates are only OK to inspect the app
- you can debug production app
In the next part we will see together what you can see in Charles.