Neden eski Android cihazlar HTTPS sitelerini açmıyor ve hemen ne yapılmalı
Kısa cevap: Android 4'te sorun çoğunlukla eskimiş güvenilir kök deposu ve TLS/şifreleme paketi uyumsuzluğundan kaynaklanır (bazen SNI veya eski WebView da rol oynar). Kullanıcı için hızlı çözüm, kendi TLS/CA yığınına sahip bir tarayıcı denemek (örneğin Firefox) veya WebView/tarayıcıyı güncellemektir; yönetici için ise uyumlu sertifika zinciri göndermek ve TLS 1.2'yi desteklemektir.
Neden böyle oluyor: Kısa ve öz
- Eskimiş kök sertifikalar: Modern CA'lar ve imza zincirleri değişmiş olabilir — eski sistemin imzayı doğrulayacak referansı yoktur.
- TLS ve şifreleme paketleri: Android 4 varsayılan olarak her zaman TLS 1.2 ve modern şifreleme paketlerini desteklemez; yalnızca yeni şifreleme paketlerini gerektiren sunucu bağlantıyı keser.
- SNI ve ClientHello'daki ana bilgisayar adı: Bazı istemciler/kütüphaneler TLS el sıkışması sırasında ana bilgisayar adını göndermez ve sunucu yanlış sertifikayı gönderir veya oturumu sonlandırır.
- Eski WebView/tarayıcı: Motorlar güncellenmez ve modern HTTPS gereksinimlerini yanlış işler.
Bir siteye girmeye çalıştığınızda "Sertifika güvenilmiyor" hatası görüyorsanız, bu büyük olasılıkla zincir/CA sorunudur. "SSL protokol hatası" veya "bağlantı sıfırlandı" hatası görüyorsanız, muhtemelen TLS/şifreleme çakışması vardır.
Kullanıcı için hızlı adımlar (hemen uygulayın)
- Uygulama mağazası üzerinden tarayıcıyı ve Android System WebView'i güncelleyin (varsa).
- Kendi güven deposuna (trust-store) sahip alternatif bir tarayıcı yükleyin (bu genellikle karmaşık ayarlar olmadan sorunu çözer).
- Kontrol için: Aynı cihazda başka bir tarayıcıda siteyi açmayı deneyin. Açılıyorsa, sorun sistem deposunda/yığınındadır.
- Yalnızca tamamen emin olduğunuzda: Kök sertifikayı manuel olarak "Ayarlar → Güvenlik → Sertifika yükle" bölümüne ekleyin. Bunu yalnızca güvenilir dahili CA'lar için yapın.
Bilinmeyen kök sertifikaları eklemeyin ve uyumluluk adına şifreleme gereksinimlerini düşürmeyin — bu, trafiğin ele geçirilme riskini artırır.
Sunucu yöneticisi / geliştiricisi ne yapabilir
- Uyumlu bir sertifika zinciri gönderin: CA böyle bir seçenek sunuyorsa cross-signed (çapraz imzalı) veya alternatif bir zincir kullanın.
- Sunucunun gerçekten tam zinciri (ara + uyumlu imza) gönderdiğinden emin olun. OpenSSL ile kontrol edin:
openssl s_client -connect example.com:443 -servername example.com - Geniş uyumlu ancak güvenli şifreleme paketleriyle TLS 1.2'yi destekleyin; yalnızca eski istemciler için eski, savunmasız protokolleri etkinleştirmeyin.
- API için: Eski Android kullanan istemcilere uyumlu zincire sahip ayrı bir uç nokta veya güncellenmiş bir istemci kütüphanesi önerin; uygulamada özel SSLSocketFactory aracılığıyla TLS1.2 açıkça etkinleştirilebilir.
Sık yapılan hatalar
- Yalnızca "modern" zinciri göndermek ve cross-signed varyantını unutmak — istemciler bozulur.
- Sorunu güvenliği düşürerek çözmek (SSLv3/TLS1.0 etkinleştirme) — bu kısa vadeli ama tehlikelidir.
- Sorunun her zaman sunucu tarafında olduğunu düşünmek: bazen suçlu uygulamadaki belirli bir istemci/kütüphanedir.
SSS
- Android 4'ü kalıcı olarak "tamir" edebilir miyim? Tamamen hayır: İşletim sistemi eskidi. Sorunu kendi yığınına sahip bir tarayıcı veya doğru sunucu yapılandırmasıyla aşabilirsiniz.
- Sertifikayı RSA/ECDSA olarak değiştirmek yardımcı olur mu? Bazı durumlarda evet — önemli olan sunucunun eski istemcinin tanıdığı bir zincir göndermesidir.
- Kiosk için daha hızlı olan şey nedir — cihazları güncellemek mi yoksa sunucuyu yapılandırmak mı? Genellikle cihazı değiştirmek veya güncel WebView içeren kontrollü bir derleme kullanmak daha ucuzdur.
Gerekirse belirli bir alan adını kontrol edebilirim: Alan adını gönderin, hangi zinciri ve protokolleri gönderdiğini ve hangi özel ayarların yardımcı olacağını açıklayayım.