Mobil uygulamalarda TLS hataları, tarayıcıdan farklı kurallar yüzünden ortaya çıkar: sistem güven deposu, sertifika sabitleme (pinning) ve platformun ağ güvenliği politikaları devreye girer. Tarayıcıda sorunsuz açılan bir adres uygulamada hata verebilir.
Belirtiler
- Android:
javax.net.ssl.SSLHandshakeException: Trust anchor for certification path not found. - iOS:
NSURLErrorServerCertificateUntrusted(-1202) veya ATS kaynaklı bağlantı reddi. - Yalnızca bazı cihazlarda veya eski işletim sistemi sürümlerinde hata.
Olası nedenler
- Ara sertifika eksik: Tarayıcılar eksik ara sertifikayı bazen kendisi tamamlar; mobil HTTP istemcileri çoğunlukla yapmaz. Sunucu tüm zinciri sunmalıdır.
- Sertifika sabitleme güncel değil: Uygulamaya gömülen parmak izi, yenilenen sertifikayla eşleşmeyebilir.
- Eski cihazın güven deposu: Yeni bir kök CA, eski işletim sistemlerinde tanınmıyor olabilir.
- Tarih/saat yanlışlığı: Cihaz saati hatalıysa geçerli sertifika süresi dolmuş sayılabilir.
- Kendinden imzalı sertifika: Test ortamlarında güvenilmez sayılır.
- iOS ATS: Zayıf TLS sürümü ya da uyumsuz cipher ATS tarafından reddedilir.
Çözüm adımları
- Sunucunun zinciri tam sunup sunmadığını kontrol edin.
- Pinning kullanıyorsanız, genel anahtarı (SPKI) sabitlemeyi ve yedek bir anahtar eklemeyi tercih edin; böylece yenilemede uygulama kırılmaz.
- Test cihazında saat ve tarihi doğrulayın.
- Uygulamadaki hata mesajından gelen tam istisna adını not edin.
openssl s_client -connect api.ornek.com:443 -servername api.ornek.com -showcerts
Çıktıda sunucu sertifikasının ardından ara sertifikanın da geldiğini görmelisiniz.
Önleme
- Sertifika yenilemesini uygulama sürümüyle koordine edin.
- Güvenlik kontrollerini (hostname doğrulamayı) hiçbir zaman "hepsini kabul et" koduyla devre dışı bırakmayın.
- API uç noktalarını SSL kontrol aracıyla düzenli sınayın.
API sunucularınız için uygun sertifikayı SSL ürünlerimizde bulabilirsiniz.