SSL Pinning — təhlükəsizlik texnikasıdır, burada tətbiq server sertifikatını əvvəlcədən məlum olan iz və ya sertifikat əsasında yoxlayır, CA etibar zəncirinə güvənmək əvəzinə. Standart yoxlamadan fərqli olaraq, pinning saxta kök sertifikat mərkəzləri vasitəsilə trafikin ələ keçirilməsinin qarşısını alır. OWASP Mobile Security Testing Guide (2025)-ə görə, bu texnika MITM hücumlarından qorunmaq üçün top-3 tövsiyə olunan nəzarət siyahısına daxildir. Pinning olmadan, hücumçu saxta kök sertifikatla tətbiqin bütün HTTPS trafikini deşifrə edə bilər.
Əsas məqamlar
SSL Pinning — təhlükəsizlik mexanizmidir, burada mobil və ya veb tətbiq etibarlı sertifikatı və ya serverin açıq açarını yadda saxlayır və sertifikatı yadda saxlanılanla uyğun gəlməyən istənilən əlaqəni rədd edir. Standart HTTPS sxemində müştəri sertifikatı kök CA-ya qədər etibar zənciri vasitəsilə yoxlayır — istənilən CA istənilən domen üçün sertifikat imzalaya bilər. SSL Pinning bu zəif nöqtəni aradan qaldırır: yüzlərlə CA-ya güvənmək əvəzinə, tətbiq yalnız bir konkret sertifikata güvənir.
Standart yoxlamanın problemi ondadır ki, yüzlərlə kök CA-dan hər hansı biri sizin domeniniz üçün etibarlı sertifikat verə bilər — təsadüfən və ya məcburiyyət altında. Öz kök sertifikatı olan korporativ proxy-ə çıxış əldə edən hücumçu, brauzer xəbərdarlığı olmadan MITM hücumu həyata keçirə bilər. SSL Pinning bu boşluğu bağlayır: CA saxta sertifikat versə belə, tətbiq onu rədd edəcək, çünki iz qeydə alınanla uyğun gəlmir.
Mobil tətbiqlərdə SSL Pinning xüsusilə vacibdir, çünki cihazlar tez-tez qorunmayan şəbəkələrdə işləyir — ictimai Wi-Fi, trafik yoxlaması olan korporativ proxy-lər, yoluxmuş giriş nöqtələri. Verizon Mobile Security Index (2025)-ə görə, mobil tətbiqlərdə məlumat sızmalarının 60%-dən çoxu nəqliyyat səviyyəsində trafikin ələ keçirilməsi ilə bağlıdır.
Mobil tətbiqlər həssas məlumatlar ötürür — autentifikasiya tokenləri, ödəniş məlumatları, istifadəçilərin şəxsi məlumatları. Əlavə qorunma olmadan HTTPS cihazda kök sertifikatın əvəz edilməsi ilə kompromizə edilə bilər — məsələn, korporativ profil və ya zərərli tətbiq quraşdırıldıqdan sonra. SSL Pinning zəmanət verir ki, cihazda saxta kök CA quraşdırılsa belə, tətbiq sertifikatı öz ağ siyahısına əsasən yoxlamağa davam edəcək.
SSL Pinning prosesi üç mərhələdən ibarətdir: izin əldə edilməsi, qoşulma zamanı yoxlama və xətanın idarə edilməsi. İnkişaf mərhələsində mühəndis server sertifikatının SHA-256 izini alır (openssl x509 -fingerprint -sha256) və onu tətbiq koduna və ya konfiqurasiya faylına yerləşdirir. Hər HTTPS sorğusunda tətbiq alınan sertifikatın izini hesablayır və onu yadda saxlanılanla müqayisə edir — dəyərlər uyğun gəlmirsə, əlaqə kəsilir.
Birinci mərhələ — qurma mərhələsində pinning: tərtibatçı server sertifikatlarını əvvəlcədən bilir və onların heşlərini yerləşdirir. İkinci mərhələ — ilk qoşulmada pinning (trust on first use, TOFU): tətbiq ilk sorğuda sertifikatı yadda saxlayır və bütün sonrakı sorğuları yoxlamaq üçün istifadə edir. TOFU dinamik mühitlər üçün əlverişlidir, lakin ilk hücumda həssasdır — əgər ilk əlaqə artıq ələ keçirilibsə, saxta sertifikat etibarlı olaraq qəbul ediləcək.
Kritik detal — ehtiyat izlər (backup pins). Sertifikatların istifadə müddəti var və onlar dəyişdirildikdə, yenilənməmiş tətbiq serverlə əlaqəni itirəcək. Mühəndislər 2–3 əlavə iz əlavə edir — məsələn, ehtiyat sertifikatın izi və kök CA-nın izi. Əsas sertifikat dəyişərsə, tətbiq backup pins-ə əsasən yoxlayır və əlaqə işləməyə davam edir.
# Sertifikatın SHA-256 izinin əldə edilməsi
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | \
openssl x509 -pubkey -noout | \
openssl pkey -pubin -outform der | \
openssl dgst -sha256 -binary | \
base64
Pinning tətbiqinin iki əsas yanaşması var: bütöv sertifikata bağlama (certificate pinning) və açıq açara bağlama (public key pinning). Hər yanaşmanın təhlükəsizlik və istifadə rahatlığına təsir edən güclü tərəfləri və məhdudiyyətləri var.
| Növ | Fiksasiya obyekti | Çeviklik | Təhlükəsizlik |
|---|---|---|---|
| Certificate Pinning | Bütöv X.509 sertifikatı | Aşağı — sertifikat dəyişdikdə yeniləmə tələb olunur | Yüksək — dəqiq bağlama |
| Public Key Pinning | Sertifikatın açıq açarı | Orta — açar yeni sertifikatda ola bilər | Yüksək — sertifikat detallarına daha az həssas |
| Hash Pinning | Sertifikatın və ya açıq açarın SHA-256 heşi | Yüksək — açar dəyişmədən sertifikatları dəyişmək olar | Orta — heşin davamlılığından asılıdır |
Sertifikata bağlama — ən sərt üsuldur. Tətbiq etibarlı sertifikatın surətini və ya onun SHA-256 izini saxlayır və hər HTTPS əlaqəsində server sertifikatı ilə müqayisə edir. Bu üsul maksimum təhlükəsizlik təmin edir, lakin rotasiya zamanı problemlər yaradır — sertifikatlar adətən 1–2 il müddətində etibarlıdır, bundan sonra tətbiqin məcburi yenilənməsi tələb olunur. Nəzarət olunan yeniləmə dövrü olan kritik sistemlər üçün tövsiyə olunur.
Açıq açarın fiksasiyası — daha çevik yanaşma. Bütöv sertifikat əvəzinə tətbiq yalnız serverin RSA və ya ECDSA açıq açarını yadda saxlayır. Açar, şirkət eyni açar cütündən istifadə edərsə, sertifikatın yenidən verilməsində dəyişməz qala bilər. Bu, tətbiq yeniləmələrinin tezliyini azaldır. Lakin açar kompromizə edilərsə, bütün müştərilərdə kaskad dəyişdirmə tələb olunacaq.
Apple platformasında SSL Pinning URLSession delegatı vasitəsilə tətbiq olunur. Tərtibatçı URLSessionDelegate protokolunu tətbiq edən sinif yaradır və didReceive challenge metodunu ləğv edir, burada server sertifikatını yadda saxlanılan izlərə qarşı əl ilə yoxlayır. Alternativ yanaşma — konfiqurasiyanı sadələşdirən Alamofire ServerTrustManager ilə istifadə.
class SSLPinningDelegate: NSObject, URLSessionDelegate {
let pinnedHash = "sha256/Wi24BE7j5qLk0iLvPq6ePEsVRqZ1yW0F6wLg="
func urlSession(_ session: URLSession,
didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
guard let serverTrust = challenge.protectionSpace.serverTrust
else { return completionHandler(.cancelAuthenticationChallenge, nil) }
if validate(serverTrust, pinnedHash) {
completionHandler(.useCredential, URLCredential(trust: serverTrust))
} else {
completionHandler(.cancelAuthenticationChallenge, nil)
}
}
}
Nümunədə, nümayəndə URLSession-dan autentifikasiya sorğusu alır, challenge-dan serverTrust çıxarır və sertifikatın SHA-256 izini yadda saxlanılanla müqayisə edir. İz uyğun gələrsə — əlaqə davam edir, əks halda challenge rədd edilir. İstehsal üçün bir neçə backup pins yoxlaması və monitorinq üçün xəta qeydiyyatı əlavə etmək tövsiyə olunur.
iOS 14-dən etibarən Apple Info.plist vasitəsilə Certificate Pinning üçün daxili dəstək əlavə etdi. Tərtibatçı NSAppTransportSecurity açarında NSPinnedDomains alt lüğəti ilə etibarlı sertifikatları göstərir. Bu yanaşma kod yazmağı tələb etmir, lakin daha az çevikdir — pins-i dinamik dəyişdirmək və ya yoxlama xətalarını qeyd etmək mümkün deyil.
Android-də SSL Pinning tətbiqinin üç əsas üsulu var: OkHttp kitabxanasının CertificatePinner vasitəsilə, Network Security Config XML vasitəsilə və HttpsURLConnection-da xüsusi yoxlama vasitəsilə. OkHttp — Retrofit və digər HTTP müştərilərində istifadə olunan ən populyar və tövsiyə olunan yanaşmadır.
val certificatePinner = CertificatePinner.Builder()
.add("api.example.com",
"sha256/Wi24BE7j5qLk0iLvPq6ePEsVRqZ1yW0F6wLg=")
.add("api.example.com",
"sha256/FiPq6ePEsVRqZ1yW0F6wLgWi24BE7j5qLk0iL=") // ehtiyat pin
.build()
val client = OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build()
OkHttp konfiqurasiyasında tərtibatçı domeni və bir və ya bir neçə SHA-256 izini göstərir. İlk izdə OkHttp server sertifikatını göstərilən pins ilə müqayisə edir. Uyğunluq yoxdursa, müştəri SSLPeerUnverifiedException atır. Backup pin məcburidir — onsuz sertifikat dəyişdikdə API sorğuları dərhal uğursuz olmağa başlayacaq.
Android API 24-dən etibarən XML konfiqurasiyası vasitəsilə deklarativ Certificate Pinning dəstəkləyir. res/xml/network_security_config.xml faylı domenlərin və onların izlərinin siyahısını ehtiva edir. Bu üsul statik konfiqurasiyalar üçün əlverişlidir, lakin TOFU və ya anomaliyaların qeydiyyatı ilə xüsusi yoxlama məntiqini tətbiq etməyə imkan vermir.
<!-- res/xml/network_security_config.xml -->
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">api.example.com</domain>
<pin-set expiration="2027-12-31">
<pin digest="SHA-256">
Wi24BE7j5qLk0iLvPq6ePEsVRqZ1yW0F6wLg=</pin>
<pin digest="SHA-256">
FiPq6ePEsVRqZ1yW0F6wLgWi24BE7j5qLk0iL=</pin>
</pin-set>
</domain-config>
</network-security-config>
SSL Pinning mobil tətbiqin təhlükəsizliyini əhəmiyyətli dərəcədə artırır, lakin əməliyyat mürəkkəbliyi gətirir. Əsas üstünlük — kök CA-lar kompromizə edilsə belə MITM hücumlarından qorunma. Tətbiq yalnız tərtibatçı tərəfindən açıq şəkildə göstərilən sertifikatlara güvənir, bütün ictimai sertifikat mərkəzləri infrastrukturuna deyil. Bu, xüsusilə maliyyə tətbiqləri, mesajlaşma proqramları və həssas məlumatları olan tətbiqlər üçün kritikdir.
Əsas çatışmazlıq — sertifikat rotasiyasının mürəkkəbliyi. Sertifikat müddəti bitərsə və ya ləğv edilərsə, tətbiqi yeniləməyən istifadəçilər əlaqəni itirir. Bu, backup pins və tədricən yeniləmə mexanizmi ilə həll olunur: yeni tətbiq köhnə və yeni sertifikatı bilir, istifadəçilər tam yeniləndikdən sonra köhnə pin koddan silinir. Minimum 2 backup pins qoymaq tövsiyə olunur — biri cari sertifikat üçün, biri gələcək üçün.
Başqa bir kompromis — pinning-i söndürmədən trafikin sazlanması üçün ictimai proxy-lərdən (Charles Proxy, Burp Suite) istifadə edə bilməmək. Bu, inkişaf mərhələsində şəbəkə sorğularının sazlanmasını çətinləşdirir. Həll — şərti kompilyasiya: debug qurmasında pinning söndürülür, release-də isə aktivdir. OWASP keçid üçün BuildConfig.DEBUG bayrağından istifadə etməyi tövsiyə edir.
| Aspekt | Üstünlük | Çatışmazlıq |
|---|---|---|
| Təhlükəsizlik | Saxta CA-lar vasitəsilə MITM-dən qorunma | Açarın kompromizə olunmasında mürəkkəblik |
| Baxım | Etibarın açıq nəzarəti | Rotasiya tətbiq yeniləməsi tələb edir |
| Sazlama | Düzgün serverə qoşulma zəmanəti | Sazlama proxy-lərinin bloklanması |
Tez-tez verilən suallar
Standart HTTPS yoxlaması tanınmış kök CA tərəfindən imzalanmış istənilən sertifikata güvənir. SSL Pinning yalnız konkret sertifikata və ya açara güvənir — CA saxta sertifikat versə, tətbiq onu rədd edəcək.
Sertifikatlar adətən 1–2 il müddətində etibarlıdır. Cari sertifikatın müddəti bitməsinə 3–6 ay qalmış pins-i yeniləmək tövsiyə olunur, yeni izi backup pin kimi əlavə edib, rotasiyadan sonra köhnəni silməklə.
Bəli, lakin CDN-in kənar serverlər arasında keçid zamanı sertifikatları dəyişə biləcəyini nəzərə almaq lazımdır. Konkret sertifikat əvəzinə açıq açara bağlanmaq və bir neçə backup pins istifadə etmək tövsiyə olunur.
Əlaqə xəta ilə kəsilir — Android-də bu SSLPeerUnverifiedException, iOS-da challenge .cancelAuthenticationChallenge ilə rədd edilir. Tətbiq bu xətanı düzgün idarə etməli və istifadəçini xəbərdar etməlidir.
Xeyr, lakin OWASP həssas məlumatlarla işləyən tətbiqlər üçün tövsiyə edir: bankçılıq, tibb, korporativ sistemlər. Sadə read-only tətbiqlər üçün EV sertifikatları ilə standart HTTPS yoxlaması adətən kifayətdir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun