Certificate pinning, bir istemcinin belirli bir sunucu için yalnızca önceden bilinen sertifikayı veya açık anahtarı kabul etmesidir. Bir CA'nın ele geçirilmesi ya da yanlış sertifika düzenlemesi durumunda bile istemcinin sahte sertifikaya güvenmemesini hedefler.
Neyi sabitlersiniz?
- Uç sertifika: En katı ama en kırılgan seçenek; her yenilemede uygulama güncellenmek zorundadır.
- Açık anahtar (SPKI) özeti: Sertifika yenilense de anahtar aynı kalırsa geçerliliğini korur.
- Ara CA: Esnek ama sabitlemenin gücünü azaltır.
SPKI özeti üretme
openssl x509 -in sertifika.pem -pubkey -noout | openssl pkey -pubin -outform DER | openssl dgst -sha256 -binary | openssl enc -base64
Mobil uygulamada örnek
Android'in ağ güvenliği yapılandırması bu işi bildirimsel yapar:
<network-security-config>
<domain-config>
<domain includeSubdomains="true">api.alanadi.com</domain>
<pin-set expiration="2027-12-31">
<pin digest="SHA-256">ANA_PIN_BASE64=</pin>
<pin digest="SHA-256">YEDEK_PIN_BASE64=</pin>
</pin-set>
</domain-config>
</network-security-config>
HPKP neden terk edildi?
Tarayıcılar için HTTP Public Key Pinning (HPKP) başlığı vardı; yanlış yapılandırma siteyi kalıcı biçimde erişilemez kılabildiği için Chrome gibi tarayıcılardan kaldırıldı. Web sitelerinde bunun yerine Certificate Transparency izlemesi ve CAA kayıtları tercih edilir.
Riskler ve iyi uygulamalar
- Mutlaka en az bir yedek pin tutun (yedek anahtar çifti).
- Sertifika süreleri kısaldıkça ve yenileme sıklaştıkça, uç sertifikayı sabitlemek operasyonel yük getirir; açık anahtarı sabit tutmak veya ara CA pini bu yükü azaltır.
- Pin süresi dolmadan yeni pinleri uygulamaya ekleyip yayımlayın.
- Kurumsal proxy/TLS denetimi yapan ağlarda pinleme bağlantıyı bozabilir; bunu kullanıcı senaryolarında hesaba katın.
Sertifikanızı yenilemeden önce SSL denetleme aracıyla zinciri kontrol edin; yeni sertifika için SSL sertifikaları sayfasına bakabilirsiniz.