Certificate Pinning: bu nima, mexanizmi va mahkamlash usullari

Muallif: IT Sectr Nashr etilgan: 2026-03-09 O'qish vaqti: 8 daq

Certificate Pinning — server sertifikati yoki ochiq kalitini mahkamlash mexanizmi, bunda ilova HTTPS ulanishini tekshirish uchun oldindan ma’lum bo‘lgan izdan foydalanadi. CA orqali standart ishonch zanjiridan farqli o‘laroq, pinning hatto buzilgan sertifikatlash markazi ham sizning domeningiz uchun soxta sertifikat bera olmasligini kafolatlaydi. OWASP MSTG (2025) ga ko‘ra, Certificate Pinning L2 himoya darajasidagi ilovalar uchun majburiy nazorat ro‘yxatiga kiritilgan. Amalga oshirish sertifikat heshlarini kodda saqlash va har bir so‘rovda tekshirishni o‘z ichiga oladi.

Asosiy ma’lumotlar

  • Certificate Pinning — ilova faqat oldindan ma’lum izga ega sertifikatga ishonadigan, butun CA zanjirini e’tiborsiz qoldiradigan texnika
  • Public Key Pinning — faqat ochiq kalitni mahkamlaydigan alternativ, sertifikat o‘zgarishida rotatsiyani soddalashtiradi
  • HPKP (HTTP Public Key Pinning) — HTTP sarlavhalari darajasida eskirgan standart, yangi loyihalar uchun tavsiya etilmaydi
  • Backup pins — asosiy sertifikat o‘zgarganda yoki muddati tugaganda ulanish uzluksizligini ta’minlaydigan zaxira izlar
  • Amalga oshirish iOS da SecTrustEvaluate orqali, Android da OkHttp dagi CertificatePinner yoki TrustManager orqali

Certificate Pinning nima?

Certificate Pinning — bu ilova ishonchli sertifikatning izini (fingerprint) saqlaydigan va HTTPS ulanishini o‘rnatish uchun yagona mezon sifatida foydalanadigan xavfsizlik texnikasi. Standart TLS modelida mijoz server sertifikati ishonchli ildiz CA tomonidan imzolanganligini tekshiradi — tizimda oldindan o‘rnatilgan yuzlab markazlardan istalgan biri. Certificate Pinning bu zanjirni to‘g‘ridan-to‘g‘ri tekshirish bilan almashtiradi: sertifikat saqlangan namunaga mos kelishi yoki kutilgan ochiq kalitni o‘z ichiga olishi kerak.

Standart modelning muammosi CA buzilishi hodisalaridan keyin aniq bo‘ldi — DigiNotar (2011), Comodo (2011), TrustCor (2022). Agar CA sizning domeningiz uchun soxta sertifikat chiqarsa, brauzer yoki ilova uni haqiqiy deb qabul qiladi. Certificate Pinning bu hujumni oldini oladi: hatto mukammal imzolangan soxta sertifikat ham rad etiladi, chunki uning izi ilovada mahkamlangan izga mos kelmaydi.

Pinning atamasi pin — „mix“ yoki „mahkamlagich“ so‘zidan kelib chiqqan: dasturchi ishonchli sertifikatni mahkamlaydi va undan har qanday chetlanish ulanishni bloklaydi. Mitre CWE-295 tadqiqotiga ko‘ra, noto‘g‘ri sertifikat tekshiruvi mobil ilovalardagi eng xavfli xavfsizlik xatolarining top-10 taligida qolmoqda va Certificate Pinning uni oldini olishning bevosita usuli hisoblanadi.

Certificate Pinning tarixi va evolyutsiyasi

Dastlab Certificate Pinning brauzerlarda HPKP (HTTP Public Key Pinning) mexanizmi orqali ishlatilgan, RFC 7469 da standartlashtirilgan. Dasturchi kutilgan kalitlarning heshlari bilan HTTP Public-Key-Pins sarlavhasini yuborgan va brauzer ularni belgilangan muddatga eslab qolgan. Biroq HPKP xavfli bo‘lib chiqdi: konfiguratsiyadagi bitta xato saytni oylar davomida bloklashi mumkin edi. 2018 yilda Chrome HPKP ni qo‘llab-quvvatlashni to‘xtatdi va hozir standart dasturiy ta’minot amalga oshirilishi — mobil ilova yoki brauzer kengaytmasi ichida.

Certificate Pinning qanday ishlaydi?

Certificate Pinning jarayoni uchta asosiy bosqichni o‘z ichiga oladi: izni hisoblash, ulanishda tekshirish va xatoni qayta ishlash. Tayyorgarlik bosqichida dasturchi ishlab chiqarish serverining sertifikati yoki ochiq kalitining SHA-256 heshini oladi. GDPR va PCI DSS ga mos ilovalar uchun zanjirdagi oraliq CA larning izlarini ham mahkamlash talab qilinadi.

Har bir HTTPS so‘rovida ilova TLS autentifikatsiya callback-ni ushlaydi, server sertifikatini ajratib oladi va uning SHA-256 heshini hisoblaydi. Bu hesh saqlangan ishonchli izlar ro‘yxati bilan taqqoslanadi. Agar moslik topilsa — ulanish davom etadi. Agar topilmasa — ilova ulanishni uzishi va tajovuzkorga amalga oshirish tafsilotlarini oshkor qilmasdan xato haqida xabar berishi kerak.

kotlin
fun validateCertificate(certificate: X509Certificate,
    expectedHash: String): Boolean {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = Base64.encodeToString(
        digest.digest(certificate.publicKey.getEncoded()),
        Base64.DEFAULT
    ).trim()
    return hash == expectedHash
}

Funksiya serverdan X509Certificate obyekti va kutilgan heshni qabul qiladi. Avval sertifikatning ochiq kaliti ajratib olinadi, SHA-256 heshi hisoblanadi va Base64 ga kodlanadi. Natija kutilgan iz bilan taqqoslanadi. Ishlab chiqarishda rotatsiyani qo‘llab-quvvatlash uchun 2–3 izdan iborat massiv bo‘yicha tekshirish qo‘shishga arziydi.

Certificate Pinning vs Public Key Pinning

Pinning ni amalga oshirishda qaysi kriptografik obyektni mahkamlashni tanlash kerak. Certificate Pinning X.509 sertifikatining o‘ziga — uning seriya raqami, amal qilish muddati va butun zanjiriga bog‘lanadi. Public Key Pinning sertifikat ichidagi faqat ochiq kalitni mahkamlaydi, qolgan maydonlarni e’tiborsiz qoldiradi. Tanlov operatsion xarajatlarga sezilarli ta’sir qiladi.

MezonCertificate PinningPublic Key Pinning
Mahkamlash obyektiX.509 sertifikati to‘liqRSA/ECDSA ochiq kaliti
RotatsiyaHar bir qayta chiqarishda yangilashni talab qiladiSertifikat bir xil kalit bilan o‘zgarganda o‘zgarmaydi
XavfsizlikMaksimal aniq bog‘lashTafsilotlarga kamroq sezgir
MoslashuvchanlikPast — sertifikatlar har 1–2 yilda o‘zgaradiYuqori — kalitlar 5–10 yil yashashi mumkin
TavsiyaBoshqariladigan yangilanishlarga ega kritik tizimlar uchunAksariyat mobil ilovalar va API lar uchun

Public Key Pinning — aksariyat loyihalar uchun afzal tanlov. Serverlarning ochiq kalitlari odatda sertifikat qayta chiqarilganda o‘zgarishsiz qoladi — kompaniya shunchaki eski kalitni yangi sertifikat bilan imzolaydi. Bu shuni anglatadiki, agar kalit juftligi o‘zgarmagan bo‘lsa, ilova sertifikat o‘zgarishidan keyin yangilanishni talab qilmaydi. Certificate Pinning esa dasturchi server va mijoz kodini to‘liq nazorat qiladigan stsenariylar uchun tavsiya etiladi, masalan, qattiq yangilanish sikliga ega korporativ ilovalarda.

Trust On First Use (TOFU)

TOFU — Certificate Pinning oldindan sozlanmaydigan, balki sertifikatni birinchi ulanishda eslab qoladigan strategiya. Bu yondashuv qaysi serverga ulanishni oldindan bilmaydigan ilovalar uchun qulaydir. Kamchilik — birinchi hujumga qarshi zaiflik: agar birinchi ulanish ushlangan bo‘lsa, soxta sertifikat ishonchli deb qabul qilinadi. TOFU SSH ulanishlarida va ba‘zi P2P protokollarida qo‘llaniladi.

iOS va Android da amalga oshirish

Ikkala platformada ham Certificate Pinning tarmoq steki darajasida TLS ulanishini ushlash orqali amalga oshiriladi. iOS da URLSession delegati yoki Alamofire ServerTrustManager ishlatiladi. Android da afzal usul — mashhur HTTP mijozlariga o‘rnatilgan va har bir domen uchun bir nechta iz konfiguratsiyasini qo‘llab-quvvatlaydigan OkHttp CertificatePinner.

swift
func validate(serverTrust: SecTrust,
    pinnedHash: String) -> Bool {
    guard let certificates = SecTrustCopyCertificateChain(serverTrust)
        as? [SecCertificate] else { return false }

    for certificate in certificates {
        let data = SecCertificateCopyData(certificate)
        var hash = Data(repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
        data.withUnsafeBytes {
            CC_SHA256($0.baseAddress,
                CC_LONG(data.count), &hash)
        }
        if hash.base64EncodedString() == pinnedHash {
            return true
        }
    }
    return false
}

Swift funksiyasida serverTrust dan sertifikatlar zanjiri ajratib olinadi, har biri uchun SHA-256 heshi hisoblanadi va natija kutilgan bilan taqqoslanadi. Zanjirdagi barcha sertifikatlar bo‘ylab o‘tish oraliq CA darajasida pinning ni amalga oshirishga imkon beradi — agar oraliq sertifikat mos kelsa, ulanish qabul qilinadi. Bu leaf sertifikatlarining rotatsiyasida moslashuvchanlikni ta’minlaydi.

Android uchun TrustManager (maxsus)

Agar ilova OkHttp dan foydalanmasa, Certificate Pinning maxsus X509TrustManager orqali amalga oshirilishi mumkin. Bu usul ko‘proq kod talab qiladi, lekin tekshirish jarayoni ustidan to‘liq nazorat beradi. TrustManager checkServerTrusted metodini bekor qiladi, bunda dasturchi server sertifikatlarini qo‘lda tekshiradi va ishonch to‘g‘risida qaror qabul qiladi. Faqat OkHttp kutubxonasi mavjud bo‘lmagan maxsus stsenariylar uchun tavsiya etiladi.

Certificate Pinning ni joriy qilishdagi xatolar

Eng keng tarqalgan xato — zaxira pinlarning yo‘qligi. Dasturchi bitta sertifikat izini qo‘yadi va uning muddati tugaganda foydalanuvchilar ommaviy ravishda ulanishni yo‘qotadilar. Minimal ruxsat etilgan konfiguratsiya — ikkita iz: joriy sertifikat va zaxira. Optimal — uchta: joriy, zaxira va ildiz CA izi fallback sifatida.

Ikkinchi xato — pinlarni kodda ochiq holda saqlash. APK yoki IPA ga kirish imkoniga ega tajovuzkor izlarni osongina ajratib olib, ularni almashtirishi mumkin. Heshllarni obfuskatsiya qilish tavsiya etiladi: satrni qismlarga bo‘lish, shifrlash bilan resurslarda saqlash yoki runtime orqali hisoblash. Android uchun satr konstantalarining obfuskatsiyasi bilan ProGuard samaralidir.

Uchinchi xato ‘development sertifikati darajasida pinning. Development va ishlab chiqarish sertifikatlari odatda farq qiladi, lekin dasturchilar ko‘pincha release qurilishida pinlarni o‘zgartirishni unutadilar. Natija — ishlab chiqarish ilovasi serverga ulana olmaydi. Yechim — BuildConfig yoki flavour-ga xos resurslar orqali debug va release uchun alohida pin konfiguratsiyasi.

  • Ignoring certificate chain — oraliq CA larni hisobga olmagan holda faqat leaf sertifikatini tekshirish, rotatsiyada ulanishni buzadi
  • Hardcoded dates — yangilanishdan keyin o‘zgarmaydigan qattiq kodlangan sertifikat amal qilish muddatlari
  • No monitoring — Certificate Pinning xatolari uchun ogohlantirishlarning yo‘qligi, natijada muammolar faqat foydalanuvchilardan aniqlanadi
  • TOFU tekshiruvsiz — qo‘shimcha tekshiruvsiz Trust On First Use dan foydalanish, birinchi MITM hujumiga soxta sertifikatni mahkamlashga imkon beradi

Tez-tez beriladigan savollar

Certificate Pinning SSL Pinning dan nima bilan farq qiladi?

SSL Pinning — SSL/TLS sertifikatiga bog‘lanish uchun umumiy atama. Certificate Pinning — X.509 sertifikatining o‘zini, faqat ochiq kalitni emas, mahkamlaydigan aniq amalga oshirish. Farq bog‘lanish obyektida: sertifikat vs kalit.

Ilovada sertifikat izlarini qanday xavfsiz saqlash mumkin?

ProGuard (Android) orqali obfuskatsiya bilan resurslarda yoki Keychain (iOS) orqali shifrlangan holda saqlash tavsiya etiladi. Pinlarni shifrlashsiz strings.xml yoki Info.plist da ochiq holda saqlashdan saqlaning.

Pinlangan izlarni qanchalik tez-tez o‘zgartirish kerak?

Serverda sertifikat har o‘zgarganda. Joriy sertifikat muddati tugashidan 3–6 oy oldin yangi izni zaxira pin sifatida qo‘shish, rotatsiyadan keyin esa eskisini olib tashlash tavsiya etiladi. Kamida bitta zaxira pin majburiydir.

Disk raskadrovka uchun Certificate Pinning ni o‘chirish mumkinmi?

Ha, shartli kompilyatsiya orqali: debug qurilishida pinning o‘chirilgan, release da esa yoqilgan. O‘tish uchun Android da BuildConfig.DEBUG yoki iOS da #if DEBUG dan foydalaning. Buni hech qachon foydalanuvchi uchun mavjud runtime flag orqali qilmang.

Sertifikat buzilgan bo‘lsa nima qilish kerak?

Darhol yangi izlar bilan ilova yangilanishini chiqaring va do‘konlarda chop eting. Majburiy yangilanish mexanizmidan foydalaning. Agar zaxira pinlar zaxira CA izini o‘z ichiga olgan bo‘lsa, vaqtincha boshqa sertifikatga ega boshqa domenga o‘tish mumkin.

Xulosa

  • Certificate Pinning — soxta CA lar orqali MITM hujumlaridan himoya qilish uchun ishonchli sertifikat yoki uning ochiq kalitini mahkamlash
  • Ikki yondashuv — certificate pinning (qattiq, sertifikatga) va public key pinning (moslashuvchan, ochiq kalitga)
  • Zaxira pinlar majburiy — sertifikat rotatsiyasida uzluksizlikni ta’minlash uchun kamida 2 iz
  • OkHttp CertificatePinner — bir nechta pinlarni qo‘llab-quvvatlash bilan Android da standart amalga oshirish usuli
  • URLSessionDelegate — SecTrust va SHA-256 heshlarini qo‘lda tekshirish bilan iOS da asosiy usul
  • Xatolar — zaxira pinlarning yo‘qligi, obfuskatsiyasiz saqlash, debug/release konfiguratsiyalarini aralashtirish
  • Tavsiya — aksariyat loyihalar uchun public key pinning dan foydalaning va Certificate Pinning faqat kritik tizimlar uchun

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing