Burp Suite SSL Pinning
Since the "traditional" way of installing a user certificate doesn't work anymore in Nougat and above, for me the easiest solution is to install the Burp CA to the system trusted certificates. You can see all the system CAs that are bundled with an Android device by going to Settings -> Security -> Trusted Credentials and viewing system CAs. You'll see the similar CAs you'd see in a browser bundle.
Trusted CAs for Android are stored in a special format in
/system/etc/security/cacerts. If we have root privileges, it's possible to write to this location and drop in the Burp CA (after some modification).
Export and convert the Burp CA The first step is to get the Burp CA in the right format. Using Burp Suite, export the CA Certificate in DER format. I saved it as
Android wants the certificate to be in PEM format, and to have the filename equal to the
subject_hash_oldvalue appended with
Note: if you are using OpenSSL <1.0, it's actually just the
subject_hash, not the "old" one
opensslto convert DER to PEM, then output the
subject_hash_oldand rename the file:
openssl x509 -inform DER -in cacert.der -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1
mv cacert.pem <hash>.0
For example, with my certificate:
Copy the certificate to the device We can use
adbto copy the certificate over, but since it has to be copied to the
/systemfilesystem, we have to remount it as writable. As root, this is easy with
adb push <cert>.0 /sdcard/
mount -o rw,remount /system
mount -o ro,remount /system
The just drop into a shell (
adb shell) and move the file to
/system/etc/security/cacertsand chmod it to 644:
mv /sdcard/<cert>.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/<cert>.0
Lastly, we have to full reboot the device with either
adb rebootor a power cycle.
After the device reboots, browsing to Settings -> Security -> Trusted Credentials should show the new "Portswigger CA" as a system trusted CA.
Now it's possible to set up the proxy and start intecepting any and all app traffic with Burp :)