Certificate Pinning: nedir, sertifika bağlama yöntemleri ve nasıl uygulanır

Yazar: IT Sectr Yayınlanma: 2026-04-02 Okuma süresi: 8 dk

Certificate Pinning, bir mobil uygulamanın CA zincirindeki herhangi bir sertifikaya güvenmek yerine, sunucu sertifikasının önceden bilinen bir örnekle eşleşip eşleşmediğini doğruladığı bir güvenlik tekniğidir. Yüzlerce sertifika yetkilisine dayanan normal TLS doğrulamasının aksine, pinning güveni tek bir belirli sertifikaya veya onun açık anahtarına daraltır. OWASP Mobil Güvenlik Test Kılavuzu'na (2024) göre, Certificate Pinning uygulanması, sertifika değiştirme ile ilgili Man-in-the-Middle saldırı senaryolarının %100'ünü engeller. OWASP MSTG, 2024

Önemli çıkarımlar

  • Certificate Pinning, bir uygulamayı belirli bir sunucu sertifikasına veya açık anahtara sıkıca bağlama tekniğidir.
  • Public Key Pinning en esnek ve güvenli yöntemdir, sertifika değiştiğinde uygulama güncellemesi gerektirmez.
  • TLS'den farkı — normal TLS herhangi bir CA'ya güvenir; pinning belirli bir sertifika için ikinci bir doğrulama seviyesi ekler.
  • Engelleme riski — sertifika yanlış güncellenirse, yeni bir sürüm yayınlanana kadar uygulama sunucuyla bağlantısını kaybedebilir.
  • OkHttp ve TrustKit, sırasıyla Android ve iOS'te pinning uygulamak için en popüler kütüphanelerdir.

Certificate Pinning nedir?

Certificate Pinning, uygulamanın sunucu sertifikasının bir örneğini sakladığı (veya “sabitlediği”) ve her bağlantıda alınan sertifikayı bu örnekle karşılaştırdığı bir güvenlik mekanizmasıdır. Sertifika eşleşmezse — resmi olarak güvenilir bir sertifika yetkilisi tarafından imzalanmış olsa bile — bağlantı sonlandırılır. Bu, bir saldırganın tehlikeye atılmış bir CA aracılığıyla sahte bir sertifika elde ettiği saldırılara (2011'de DigiNotar veya 2011'de Comodo'da olduğu gibi) karşı korur.

Sertifika bağlama nasıl çalışır

Pinning süreci üç aşamadan oluşur: güvenilir bir örnekten sertifika veya açık anahtarın parmak izinin (fingerprint) çıkarılması; bu parmak izinin uygulama kodunda veya kaynaklarında saklanması; TLS el sıkışması sırasında karşılaştırma. Geliştirici, tüm sertifikanın SHA-256 parmak izini veya yalnızca açık anahtarı (Public Key Pinning) sabitleyebilir. İkinci yaklaşım tercih edilir: sertifika yenilendiğinde, açık anahtar genellikle aynı kalır ve uygulama sunucuyla bağlantısını kaybetmez. OWASP tavsiyelerine göre minimum pin sayısı 2'dir: biri mevcut ve biri anahtar döndürme için yedek. OkHttp ve TrustKit gibi modern kütüphaneler, geliştiricinin ek çabası olmadan her TLS bağlantısında belirtilen pinlerin doğrulama sürecini otomatikleştirir. Pinning'in standart TLS doğrulamasının yerini almadığını, onu tamamladığını anlamak önemlidir: önce sertifika zinciri doğrulaması ile normal bir el sıkışma gerçekleştirilir, ardından ek bir pinning kontrolü yapılır. Bu iki seviyeli koruma, hatalı sertifika verme ve sertifika yetkilisi altyapısına yönelik saldırılar dahil olmak üzere CA güvenliğinin ihlaliyle ilgili güvenlik açıklarını ortadan kaldırır.

Certificate Pinning türleri

Certificate Pinning uygulamak için her biri kendi depolama ve doğrulama özelliklerine sahip birkaç yaklaşım vardır. Yöntem seçimi, uygulama mimarisine, sertifika güncelleme sıklığına ve esneklik gereksinimlerine bağlıdır.

Pinning türüNe depolanırEsneklikKullanım örneği
Certificate PinningTam X.509 sertifikasıDüşük1–2 yıl sabit sertifika
Public Key PinningAçık anahtar (SPKI)OrtaOWASP önerilen yaklaşım
Hash PinningSHA-256 parmak iziOrtaOkHttp'de popüler (certificatePinner)
CA PinningAra CAYüksekKurumsal uygulamalar

En dengeli yöntem, OWASP ve Google tarafından önerilen Public Key Pinning'dir. Belirli bir sertifika (her 1–2 yılda bir değişen) yerine, uygulama SubjectPublicKeyInfo parmak izini — açık anahtarın bir soyutlamasını — depolar. Sertifika aynı anahtarla yenilenirse (anahtar yeniden kullanımı), pin geçerliliğini korur. Anahtar değişirse — geliştirici önceden uygulama güncellemesine bir yedek pin ekler. Mobil projelerde minimum/maksimum pin stratejisi kullanılır: yedek dahil minimum 2 pin ve şişkinliği ve artan doğrulama süresini önlemek için maksimum 4 pin.

Pinning türü seçim stratejisi

Belirli pinning türünün seçimi, uygulama mimarisine ve gereksinimlerine bağlıdır. Tek bir alan adı üzerinden REST API ile çalışan genel mobil uygulamalar için OkHttp veya TrustKit aracılığıyla iki pinli Public Key Pinning idealdir. Kendi sertifika yetkilisine sahip kurumsal uygulamalar için CA Pinning uygundur — güven nihai sertifikaya değil, CA'ya bağlı olduğundan, istemci sertifikaları değiştiğinde güncelleme gerektirmez. IoT ve gömülü sistemler için tam sertifika sabitlemeli Certificate Pinning önerilir: cihazlar nadiren güncellenir, bu nedenle tüm güven zinciri üzerinde kontrol kritiktir. Pin son kullanma tarihlerinin izlenmesi zorunlu bir uygulamadır: mevcut sertifika geçersiz hale gelmeden önce yeni pinlerle bir uygulama güncellemesi yayınlamak için sertifikanın sona ermesinden 30, 14 ve 7 gün önce uyarılar ayarlayın. Yeni pinlerle güncelleme yayınlamayı otomatikleştirmek için, uygulama mağazasında yeni bir sürüm yayınlamadan pin listesini dinamik olarak güncellemeye izin veren Firebase Remote Config veya özel bir yapılandırma API'si kullanılması önerilir.

Certificate Pinning'in avantajları ve dezavantajları

Certificate Pinning, mobil uygulama güvenliğini önemli ölçüde artırır ancak geliştirme ekibine operasyonel bir yük getirir. Yanlış uygulama nedeniyle bağlantı engelleme risklerine karşı güvenlik faydalarını tartmak önemlidir.

Ana avantaj, CA güvenliğinin ihlali durumları dahil olmak üzere Man-in-the-Middle saldırılarına karşı korumadır. Pinning, bir saldırgan tarafından yayınlanan sahte sertifikaları işe yaramaz hale getirir: bir CA sahteciliği imzalamış olsa bile, uygulama onu reddedecektir. Ek bir fayda, trafik incelemesi için sertifikaları değiştiren kurumsal proxy sunucularına karşı korumadır. Google Security Blog'a (2023) göre, pinning kullanan uygulamaların, yalnızca standart TLS doğrulaması kullanan uygulamalara kıyasla trafik ele geçirme yoluyla tehlikeye atılma olasılığı %86 daha düşüktür.

Pinning'in ana dezavantajı, kendini engelleme riskidir: uygulama güncellemesi yayınlanmadan önce sunucu sertifikası değişirse (yenileme, sağlayıcı değişikliği, anahtar döndürme), kullanıcılar sunucuya erişimi kaybeder. Ek dezavantajlar: hata ayıklama karmaşıklığı (her yapılandırma değişikliği pin güncellemeleri gerektirir), TrustKit kullanırken APK boyutunda 5–15 KB artış ve yeni bir sürüm olmadan değişiklikleri hızlı bir şekilde geri alamama. Riskleri en aza indirmek için yedek pinler, her 2–3 ayda bir otomatik döndürme ve uygulamanın hem eski hem de yeni sertifikayı kabul ettiği bir ödemesiz dönem kullanılır. Pinning etkinken geliştirme sırasında, ağ isteklerinde hata ayıklamak için proxy araçlarının (Burp Suite, Charles) kullanılamayacağını da dikkate almak önemlidir — geliştirme yapıları için, pinning BuildConfig.DEBUG bayrağı aracılığıyla devre dışı bırakılmalı ve QA testi, koruma etkinken yayın imzası üzerinde yapılmalıdır. Bazı ekipler, geliştirme sırasında bile korumayı sürdürmek için geliştirme ortamı için ayrı bir pinning sertifikasına sahip bir hazırlık alan adı kullanır.

Android'de Certificate Pinning uygulaması

OkHttp — ağ istekleri için standart kütüphane — kullanarak Android'de Certificate Pinning uygulamasına bir örnek bakalım. OkHttp, açık anahtarların SHA-256 hash'lerini kabul eden yerleşik bir CertificatePinner sağlar.

kotlin
val certificatePinner = CertificatePinner.Builder()
    .add(
        "api.example.com",
        "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
    )
    .add(
        "api.example.com",
        "sha256/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB="
    )
    .build()

val client = OkHttpClient.Builder()
    .certificatePinner(certificatePinner)
    .build()

Yukarıdaki kodda, api.example.com alan adı için iki pin ekliyoruz: birincil (mevcut sertifika) ve bir yedek pin (döndürme için). OkHttp, sunucu sertifikasının belirtilen SHA-256 parmak izlerinden biriyle eşleşip eşleşmediğini otomatik olarak doğrular. Sertifikanın SHA-256 parmak izini almak için şu komutu kullanın: openssl s_client -connect api.example.com:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64. Parmak izlerini kodda düz metin olarak değil, şifrelenmiş veya karartılmış olarak saklamak önemlidir: MobSF statik analizi, DEX dosyalarında ham SHA-256 dizelerini kolayca bulur. Pinlerin res/raw kaynaklarında AES ile şifrelenmiş olarak saklanması ve yerel kod (NDK/JNI) aracılığıyla uygulama başlangıcında çözülmesi önerilir.

TrustKit aracılığıyla iOS uygulaması

iOS'te, Certificate Pinning için birincil araç açık kaynaklı TrustKit kütüphanesidir. OkHttp'nin aksine, TrustKit Info.plist aracılığıyla bildirimsel olarak yapılandırılır ve uygulamayı yeniden derlemeden pin değişikliklerine izin verir. Yapılandırma, alan adlarına sahip bir sözlük ve SHA-256 açık anahtar parmak izleri dizisi içerir. TrustKit, NSURLSession isteklerini otomatik olarak engeller ve veri iletimi başlamadan önce sertifikaları doğrular. TrustKit'in kritik bir özelliği, pin doğrulama raporları desteğidir: kütüphane, pin uyuşmazlığı durumunda belirtilen bir uç noktaya rapor gönderebilir ve sertifika anormalliklerine hızlı yanıt verilmesini sağlar. Apple, iOS 14'ten itibaren Info.plist'te yerel bir NSPinnedDomains mekanizması da sağlar, ancak TrustKit daha esnek yapılandırma, rapor desteği ve işletim sistemi güncellemesi olmadan pinleri sıcak değiştirme yeteneği nedeniyle tercih edilen seçim olmaya devam etmektedir. TrustKit'in didReceiveChallenge delegesi aracılığıyla URLSession ile entegre olduğunu ve başarılı pin doğrulamasında .performDefaultHandling, uyuşmazlık durumunda .cancelAuthenticationChallenge döndürdüğünü belirtmek önemlidir. Pin doğrulama raporlarını izlemek için, hata sıklığını analiz eden ayrı bir uç nokta yapılandırılması önerilir: rapor sayısı keskin bir şekilde artarsa — bu, bir MitM saldırısına veya acil pin güncellemesi gerektiren yakın bir sertifika sona ermesine işaret ediyor olabilir.

Sıkça sorulan sorular

Basit terimlerle Certificate Pinning nedir?

Certificate Pinning, telefonunuzda bir arkadaşınızın parmak izini kaydetmek gibidir: “doğru” sunucu sertifikasının neye benzediğini hatırlarsınız ve birisi “resmi” bir makamdan kimlik gösterse bile başka kimseye güvenmezsiniz.

Certificate Pinning normal HTTPS'den nasıl farklıdır?

Normal HTTPS, yüzlerce yetkili arasından herhangi bir CA tarafından imzalanmış herhangi bir sertifikaya güvenir. Certificate Pinning üstüne bir kontrol ekler: sertifika yalnızca geçerli olmakla kalmamalı, özellikle uygulama koduna sabitlenmiş olan sertifika olmalıdır.

Pinning kullanırken sertifika nasıl güncellenir?

2–3 pin saklanması önerilir: mevcut pin ve yeni sertifika için bir yedek pin. Sertifika değişikliğinden 1–2 ay önce, gelecekteki sertifikanın pini eklenmiş olarak uygulamanın yeni bir sürümünü yayınlayın. Değişiklikten sonra, eski pin bir sonraki sürümde kaldırılır.

Certificate Pinning ücretsiz CA'larla kullanılabilir mi?

Evet, kullanılabilir. Pinning, Let's Encrypt dahil tüm sertifikalarla çalışır. Ücretsiz sertifikaların kısa bir geçerlilik süresine (3 ay) sahip olduğunu hatırlamak önemlidir, bu nedenle yedek pin stratejisi ve otomatik döndürme zorunlu hale gelir.

Bir uygulamada Certificate Pinning nasıl test edilir?

Pinning'i test etmek için Burp Suite veya mitmproxy kullanın. Pinning ile uygulama doğru yapılandırılmışsa, proxy aracı trafiği engelleyemez — bağlantı el sıkışma aşamasında sonlandırılır. Entegrasyon testleri için OkHttp'nin MockWebServer'ını kullanın.

Özet

  • Certificate Pinning, Man-in-the-Middle saldırılarına ve CA değiştirmeye karşı koruyan bir sertifika bağlama tekniğidir.
  • Public Key Pinning, tüm sertifika yerine açık anahtar parmak izine dayanan OWASP tarafından önerilen yöntemdir.
  • OkHttp CertificatePinner Android'de ve TrustKit iOS'ta mobil projelerde pinning uygulamak için birincil araçlardır.
  • 2+ pin stratejisi, sunucu sertifikası değiştiğinde uygulama engellemesini önler.
  • SHA-256 pinning, sunucunun açık anahtar parmak izini oluşturmak için openssl komutunu gerektirir.
  • Ödemesiz dönem — örtüşen geçerlilik tarihlerine sahip yedek pin kullanımı, bağlantı kaybı riskini sıfıra indirir.
  • Öneri: yedek pin ile tüm üretim alan adları için açık anahtar pinning uygulayın ve bağlantı kesintileri için izleme kurun.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun