Android SSL Pinning Çalışmam

Uzun süredir ilgimi çeken bir konudur ssl pinning aslında. Bu merakım bir android uygulamasını Charles yazılımı ile Man-in-the-middle atağı yaparken karşılaştığım sorunla başladı. Charles’in CA sertifikasını telefona yüklediğim halde uygulamanın yolladığı istekleri kesemiyordum.

Öncelikle ssl unpinning üzerine araştırma yaptım ve araya girebilmek için farklı yöntemler keşfettim fakat bu yazımda Curl request yollarken ssl pinning kullanan bir android uygulaması geliştireceğiz.

Yeni bir android projesi oluşturalım ve gradle ile volley kütüphanemizi ekleyelim.

dependencies {
compile 'com.android.volley:volley:1.0.0'
}

Ve manifest dosyamıza internet iznini ekleyelim

<uses-permission android:name="android.permission.INTERNET" />

https://github.com/berkayyildi/android/tree/master/sslpinning dosyalarımızı düzenleyerek projemize ekleyelim.

Ssl sertifikamızın public keyini bulmak için Pubkeymanager.java nın CertificateException kımına + encoded ekleyerek log ekranına yazmasını sağlayabiliriz.

if (!expected) {
    throw new CertificateException(
            "Not trusted" + encoded);
}

SSL pinning yöntemleri bununla sınırlı kalmamaktadır farklı yöntemler için de farklı unpining çözümleri üretilmelidir.

Bu yazımda fikir vermesi amacıyla android volley kütüphanesinin üzerine bir pinning çalışması örneğini inceledik.