DataSSL Panel v2 Yayında! — Yeni DataSSL Panel v2 ile daha modern, hızlı ve kullanıcı dostu bir deneyim sunuyoruz.Yenilikler:Modern ve responsive ta...
Anasayfa İletişim
SSL Güvenliği

SSL Pinning Hataları: Mobil Uygulama ve API Güvenliği Rehberi

SSL/Certificate pinning nedir, neden başarısız olur? iOS ve Android uygulamalarda pinning hataları, sertifika yenileme sorunları ve güvenli pin yönetimi rehberi.

11 dk okuma

SSL Pinning Nedir?

SSL Pinning (Certificate Pinning), bir uygulamanın yalnızca belirli bir SSL sertifikasına veya public key'e güvenmesini sağlayan güvenlik mekanizmasıdır. Normal SSL doğrulamasında tarayıcı tüm güvenilir CA'lara güvenir; pinning ile uygulama yalnızca belirlenen sertifika/key ile bağlantı kabul eder.

Bu mekanizma özellikle mobil uygulamalarda ve API iletişiminde man-in-the-middle (MITM) saldırılarını önlemek için kullanılır.

Pinning Türleri

Pinning TürüSabitlenenEsneklikGüvenlik
Certificate PinningTüm sertifikaDüşükEn yüksek
Public Key PinningSPKI (public key hash)OrtaYüksek
CA PinningSertifika otoritesiYüksekOrta

Yaygın SSL Pinning Hataları

Hata 1: Sertifika Yenilendi Ama Pin Güncellenmedi

En sık karşılaşılan sorun. SSL sertifikası yenilendiğinde certificate pinning kullanılıyorsa, yeni sertifikanın pini uygulama kodundakiyle eşleşmez.

Belirtiler

  • Uygulama API çağrısı yapamıyor, "SSL Handshake Error" veya "Certificate verification failed"
  • Web sitesi tarayıcıda çalışıyor ama uygulama bağlanamıyor
  • Sertifika yenilemesi sonrası aniden tüm kullanıcılar etkileniyor

Çözüm

  • Public Key Pinning kullanın: Sertifika değişse bile aynı key pair kullanılabilir
  • Backup Pin ekleyin: Her zaman en az 2 pin sabitleyin (aktif + yedek)
  • Uygulama güncellemesi: Yeni pini içeren güncelleme yayınlayın

Hata 2: Proxy/CDN Sertifika Değişikliği

Cloudflare gibi CDN servisleri kendi SSL sertifikalarını kullanır. CDN sertifikası değiştiğinde pin uyumsuzluğu oluşur.

Çözüm

  • CDN arkasında pinning kullanmaktan kaçının veya root CA'yı pinleyin
  • CDN'in (Cloudflare) origin certificate'ini pinleyin

Hata 3: Android Network Security Config Hatası

<!-- Android: res/xml/network_security_config.xml -->
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">api.example.com</domain>
        <pin-set expiration="2026-06-01">
            <!-- Aktif pin -->
            <pin digest="SHA-256">base64EncodedSHA256Hash=</pin>
            <!-- Yedek pin (farklı key ile) -->
            <pin digest="SHA-256">backupBase64Hash=</pin>
        </pin-set>
    </domain-config>
</network-security-config>

⚠️ expiration tarihi önemli — süre dolduğunda pinning otomatik devre dışı kalır ve uygulama çalışmaya devam eder.

Hata 4: iOS ATS Çakışmaları

// iOS: URLSession ile pinning
func urlSession(_ session: URLSession,
                didReceive challenge: URLAuthenticationChallenge,
                completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
    guard let serverTrust = challenge.protectionSpace.serverTrust,
          let serverCert = SecTrustGetCertificateAtIndex(serverTrust, 0) else {
        completionHandler(.cancelAuthenticationChallenge, nil)
        return
    }
    // Public key hash karşılaştırması yapın
}

Pin Hash Nasıl Hesaplanır?

# Sertifikadan SPKI pin hash hesaplama
openssl x509 -in certificate.crt -pubkey -noout | \
  openssl pkey -pubin -outform der | \
  openssl dgst -sha256 -binary | \
  openssl enc -base64

# Çalışan sunucudan pin alma
openssl s_client -connect api.example.com:443 -servername api.example.com | \
  openssl x509 -pubkey -noout | \
  openssl pkey -pubin -outform der | \
  openssl dgst -sha256 -binary | \
  openssl enc -base64

Güvenli SSL Pinning Stratejileri

  1. Public Key Pinning tercih edin: Sertifika yenilendiğinde aynı key pair ile yeni sertifika alabilirsiniz
  2. Backup pin ekleyin: Her zaman yedek bir public key pini sabitleyin
  3. Pin sona erme tarihi belirleyin: Android'de expiration özelliği ile acil durumlarda koruma
  4. Remote pin güncellemesi: Pin listesini uzaktan güncelleyebilecek bir mekanizma kurun
  5. Root CA pinleme: En esnek yöntem — CA değişmediği sürece sertifika yenilemelerinden etkilenmez

HTTP Public Key Pinning (HPKP) — Kullanılmıyor

HPKP, web tarayıcılarında public key pinning yapmak için kullanılan bir HTTP header'ıydı. Ancak yanlış yapılandırıldığında siteyi kalıcı olarak erişilemez yapabildiği için 2020'de tüm tarayıcılardan kaldırıldı. Yerine Certificate Transparency ve Expect-CT header'ı geçmiştir.

Sonuç

SSL Pinning, mobil uygulamalar ve API güvenliği için güçlü bir MITM koruma katmanıdır. Ancak sertifika yenileme süreçleriyle uyumlu şekilde yönetilmelidir. Public key pinning, backup pin kullanımı ve expiration tarihi belirleme — bu üç uygulama, pinning kaynaklı arızaları önlemenin en etkili yoludur.

Bu yazıyı paylaş
Yazar

Ali Yiğit

Önerilen SSL Sertifikaları

Tüm Ürünler
EV Certum

Certum Premium EV Multi-Domain SSL

Certum Premium EV Multi-Domain SSL ile birden fazla domaini EV düzeyinde koruyun. Şirket adı görünür

18.368,73 ₺ /yıl
Detaylar
EV Certum

Certum Premium EV SSL

Certum Premium EV SSL ile en yüksek güven seviyesini sağlayın. Genişletilmiş doğrulama, şirket adı g

14.861,57 ₺ /yıl
Detaylar
EV DigiCert

DigiCert Basic EV SSL

DigiCert Basic EV SSL ile genişletilmiş doğrulama. Tarayıcıda kurum adı görünür, $1.500.000 garanti,

18.417,83 ₺ /yıl
Detaylar