SSL (Secure Sockets Layer) ve TLS (Transport Layer Security), bir istemci ile sunucu arasında ağ üzerinden güvenli veri iletimi sağlayan kriptografik protokollerdir. Tüm trafiği şifreleyerek saldırganların verileri ele geçirmesini ve değiştirmesini önlerler. Google Transparency Report (2025)'e göre, dünyadaki mobil trafiğin %95'inden fazlası TLS şifrelemesi kullanmaktadır. Bu protokol olmadan, açık Wi-Fi veya mobil ağ üzerinden gönderilen herhangi bir bilgi üçüncü taraflarca okunabilir. Cloudflare, 2024
Önemli Noktalar
SSL (Secure Sockets Layer), 1995 yılında Netscape tarafından web trafiğini korumak için geliştirilmiş bir protokoldür. İlk sürüm SSL 1.0 hiçbir zaman yayınlanmadı; SSL 2.0 (1995) ve SSL 3.0 (1996) 2000'lerin başına kadar kullanıldı ancak kritik güvenlik açıkları içeriyordu. SSL'nin yerini TLS (Transport Layer Security) aldı — IETF tarafından standartlaştırılmış geliştirilmiş bir sürüm. TLS 1.0 (1999), SSL 3.0'a dayanıyordu; sonraki sürümler TLS 1.1 (2006), TLS 1.2 (2008) ve TLS 1.3 (2018) ise kademeli olarak orijinal mimariden uzaklaştı, yeni şifreleme algoritmaları ekledi ve güvenlik açıklarını düzeltti. Bugün SSL eskimiş kabul edilir ve tüm modern sistemler TLS kullanır, ancak her iki protokol de alışkanlıkla genellikle SSL/TLS olarak birlikte anılır.
SSL/TLS'nin tarihi, erken web'de güvenli veri iletimi ihtiyacıyla başladı. 1994 yılında Netscape, Navigator tarayıcısı için SSL 1.0'ı geliştirdi, ancak ciddi güvenlik sorunları nedeniyle protokol hiçbir zaman yayınlanmadı. SSL 2.0 1995'te piyasaya sürüldü ve pratikte kullanıldı, ancak çok sayıda güvenlik açığı içeriyordu: Ortadaki Adam saldırılarına karşı koruma eksikliği, zayıf şifreleme algoritmaları ve kesme saldırılarına karşı hassasiyet. SSL 3.0 (1996) çoğu sorunu düzeltti, ancak 2014 yılına kadar POODLE güvenlik açığı keşfedildi ve bunun üzerine IETF tüm SSL sürümlerini resmen geçersiz ilan etti. TLS 1.0–1.3, kriptografik gücü, performansı ve gizliliği aşamalı olarak iyileştirdi; TLS 1.3, el sıkışmayı iki gidiş-dönüşten bire indirdi — bu, istikrarsız bağlantılı mobil uygulamalar için kritik öneme sahiptir.
El Sıkışma (Handshake), bir istemci ile sunucu arasında güvenli bağlantı kurma sürecidir. Tarafların protokol sürümü üzerinde anlaştığı, şifreleme algoritmalarını seçtiği, anahtarları değiştirdiği ve birbirlerini doğruladığı birkaç ardışık adımdan oluşur. TLS 1.3'te el sıkışma yalnızca bir ağ gidiş-dönüşü (1-RTT) alırken, TLS 1.2'de iki (2-RTT) gerekiyordu.
İlk adım, istemcinin bir ClientHello göndermesidir — desteklenen TLS sürümlerinin, şifre takımlarının ve rastgele bir sayının listesini içeren bir mesaj. Sunucu, seçilen sürüm ve şifre, X.509 sertifikası ve dijital imza ile bir ServerHello ile yanıt verir. İstemci, sertifikayı sertifika otoritesi (CA) zinciri aracılığıyla doğrular, bir oturum anahtarı oluşturur ve bunu sertifikadaki sunucunun genel anahtarıyla şifreleyerek gönderir. Sunucunun onayından sonra güvenli veri iletimi başlar. Tüm el sıkışma modern cihazlarda 1–3 milisaniye sürer ve kullanıcı tarafından fark edilmez.
TLS kimlik doğrulamasının temeli, X.509 formatındaki sertifikalar üzerine inşa edilmiş Açık Anahtar Altyapısıdır (PKI). Her sertifika şunları içerir: bir alan adı (Common Name veya Subject Alternative Name), sunucunun genel anahtarı, verenin adı (Sertifika Otoritesi), bir son kullanma tarihi ve CA'nın dijital imzası. İstemci, sunucu sertifikasını güven zinciri boyunca doğrular: sunucu sertifikasından, sertifikası işletim sistemine gömülü olan kök CA'ya kadar. Android cihazlarda, kök sertifikalar sistem anahtar deposunda saklanır ve Google Play Services aracılığıyla güncellenir; iOS'ta — iOS güncellemeleri aracılığıyla. Zincirdeki herhangi bir halka kırılırsa (süresi dolmuş sertifika, alan adı uyuşmazlığı, bilinmeyen CA), istemci bağlantıyı sonlandırır. Kendinden imzalı sertifikalar (geliştirmede kullanılan) için açık güven gereklidir — Android'de Network Security Config aracılığıyla, iOS'ta Info.plist'te NSExceptionDomains aracılığıyla. Sertifika zinciri doğrulama süreci, CRL (Sertifika İptal Listesi) veya OCSP (Çevrimiçi Sertifika Durum Protokolü) aracılığıyla iptal durumu kontrolünü de içerir, ancak mobil cihazlarda OCSP istekleri bağlantıyı hızlandırmak için genellikle atlanır — bu, mimarların dikkate alması gereken güvenlik ve performans arasında bir ödünleşimdir.
SSL ve TLS terimleri sıklıkla birbirinin yerine kullanılsa da, mobil uygulamaların güvenliğini ve performansını etkileyen temel teknik farklılıklar vardır.
| Özellik | SSL 3.0 | TLS 1.2 | TLS 1.3 |
|---|---|---|---|
| Çıkış Yılı | 1996 | 2008 | 2018 |
| Durum | Eskimiş (RFC 7568) | Aktif (önerilen) | Güncel (en iyi) |
| Gidiş-Dönüş | 2 | 2 | 1 |
| Anahtar Değişim Algoritması | RSA | RSA, ECDHE | ECDHE (yalnızca) |
| Kimlik Doğrulamalı Şifreleme | Hayır | GCM, CCM | AEAD zorunlu |
| Perfect Forward Secrecy | Hayır | İsteğe bağlı | Zorunlu |
TLS 1.3 ile öncekiler arasındaki temel fark, ECDHE protokolü aracılığıyla Perfect Forward Secrecy (PFS) kullanımının zorunlu olmasıdır. Bu, bir saldırgan sunucunun özel anahtarına erişse bile, önceden ele geçirilmiş trafiğin şifresini çözemeyeceği anlamına gelir. Mobil uygulamalar için, sunucunun ele geçirilmesinin gerçek bir tehdit olduğu durumlarda, PFS'li TLS 1.3 zorunlu bir güvenlik gereksinimidir.
SSL ve TLS'nin eski sürümleri, onları üretim kullanımı için uygunsuz kılan iyi belgelenmiş güvenlik açıklarına sahiptir. POODLE (CVE-2014-3566), dolgu kehaneti yoluyla SSL 3.0'a saldırarak 256 istekte oturum çerezlerinin şifresinin çözülmesine olanak tanır. BEAST (CVE-2011-3389), tahmin edilebilir bir IV aracılığıyla TLS 1.0 CBC modundaki bir güvenlik açığından yararlanır. Heartbleed (CVE-2014-0160) — bir protokol güvenlik açığı değil, OpenSSL uygulamasında sunucu belleğinin okunmasına izin veren bir hatadır: Netcraft'a göre, 2014'te 500.000'den fazla sunucu güvenlik açığına sahipti. Android 10 (API 29) ve iOS 13'ten başlayarak, tüm bu protokoller sistem düzeyinde devre dışı bırakılmıştır. Bununla birlikte, geliştiriciler bir uygulamayı başlatmadan önce SSL Labs Test (qualys.com) aracılığıyla sunucu yapılandırmalarını kontrol etmeli, güncel olmayan şifre takımlarının bulunmadığından ve TLS 1.3'ün desteklendiğinden emin olmalıdır.
Mobil uygulamalarda TLS, verileri üç düzeyde korur: içerik şifreleme (sunucu dışında kimse verileri okuyamaz), bütünlük doğrulama (veriler aktarım sırasında değiştirilemez) ve sunucu kimlik doğrulaması (istemci doğru sunucuya bağlandığından emindir). Kimlik doğrulaması özellikle kritiktir: onsuz, bir saldırgan DNS sahteciliği veya sahte bir Wi-Fi erişim noktası aracılığıyla sunucuyu taklit edebilir.
Google Play Protect (2024) tarafından yapılan bir araştırmaya göre, Android uygulamalarının %76'sı TLS'yi sertifika doğrulamasıyla doğru şekilde kullanmaktadır. Kalan %24'ü hatalar yapmaktadır: test için sertifika doğrulamasını devre dışı bırakır (ve üretimde tekrar etkinleştirmeyi unutur), doğrulama olmadan kendinden imzalı sertifikalar kullanır veya SSL 3.0 ve TLS 1.0 gibi güncel olmayan protokollere izin verir. iOS'ta Apple App Transport Security (ATS), 2017'den beri en az TLS 1.2 gerektirir ve iOS 15'ten başlayarak, tüm ağ istekleri için varsayılan olarak TLS 1.3 kullanır. Ek koruma için Certificate Pinning — belirli bir sunucu sertifikasına bağlama — uygulanması da önerilir.
Android'de en popüler ağ kitaplıklarından biri olan OkHttp'yi kullanarak güvenli bir HTTPS bağlantısı yapılandırma örneğine bakalım. Doğru yapılandırma, TLS 1.3 kullanımını zorunlu kılmayı ve sertifika doğrulamasını içerir.
val client = OkHttpClient.Builder()
.connectionSpecs(
listOf(
ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_3, TlsVersion.TLS_1_2)
.cipherSuites(
CipherSuite.TLS_AES_128_GCM_SHA256,
CipherSuite.TLS_AES_256_GCM_SHA384,
CipherSuite.TLS_CHACHA20_POLY1305_SHA256
)
.build()
)
)
.hostnameVerifier { hostname, session ->
SSLSession.DefaultHostnameVerifier.verify(hostname, session)
}
.build()
Bu örnekte, desteklenen TLS sürümleri kümesini yalnızca 1.3 ve 1.2 ile sınırlandırıyor, güncel olmayan TLS 1.0/1.1'i hariç tutuyoruz. Şifre takımları, AEAD modu ve zorunlu Perfect Forward Secrecy ile modern algoritmalardan seçilir. HostnameVerifier, ana bilgisayar adının sertifikayla eşleşip eşleşmediğini kontrol eder. iOS'ta, benzer yapılandırma tlsMinimumSupportedProtocolVersion parametresi .TLSv13 olarak ayarlanarak URLSession yapılandırması aracılığıyla yapılır. Ek olarak, iOS'ta üst sürüm sınırını belirlemek için tlsMaximumSupportedProtocolVersion ayarlanabilir — bu, henüz TLS 1.3'e geçmemiş eski sunucularla uyumluluk için yararlıdır. Bu tür bir yapılandırma, bir mobil uygulamada veri iletimi için maksimum güvenlik seviyesini garanti eder.
Sıkça Sorulan Sorular
TLS, protokolün daha yeni ve daha güvenli bir sürümüdür. SSL eskimiştir ve kullanılmamalıdır (RFC 7568). Pratikte, her iki terim de HTTPS şifrelemesini ifade eder, ancak teknik olarak tüm modern sistemler TLS 1.2 veya 1.3 ile çalışır.
Burp Suite veya Charles Proxy gibi bir proxy aracı kurun ve uygulamanın trafiğini yakalayın. Bağlantı HTTPS kullanıyorsa ve sertifika geçerliyse — uygulama TLS kullanıyordur. Trafik HTTP üzerinden gidiyorsa — şifreleme yoktur.
Üretim derlemeleri için yalnızca TLS 1.2 ve TLS 1.3'e izin verilir. SSL 3.0, TLS 1.0 ve TLS 1.1 protokolleri hem sunucuda hem de istemci uygulamasında devre dışı bırakılmalıdır. 2020'den bu yana, büyük platformlar (Android, iOS, tarayıcılar) en az TLS 1.2 gerektirmektedir.
Evet, önerilir. TLS, sertifikayı bir sertifika otoriteleri zinciri aracılığıyla doğrular, ancak herhangi bir CA tehlikeye girerse (2011'de DigiNotar'da olduğu gibi), bir saldırgan sahte sertifika düzenleyebilir. Pinning, ek bir doğrulama katmanı ekler.
TLS 1.3, bağlantı kurma süresini 2 gidiş-dönüşten 1'e düşürerek ilk bağlantıda %30–50 iyileşme sağlar. İstikrarsız bağlantıları olan mobil uygulamalar (metro, tren) için bu, veri yükleme hızı açısından kritik öneme sahiptir.
Özet
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.
Ayrıca okuyun