Yeni bir derleme yayınladınız, VPN’e geçtiniz ve aynı ekran yüklenmemeye başladı. Android 9 ve sonrasında daha yaygın açıklama daha sıkıcı: platform, API 28 veya üstünü hedefleyen uygulamalar için düz HTTP’yi reddediyor ve VPN yalnızca bunu ortaya çıkaracak kadar bağlamı değiştirdi. Gördüğünüz hata HTTP istemcisine bağlıdır, bu yüzden cleartext kelimesini çok nadiren söyler.

Bu başarısızlık gerçekte nedir

Android 9’dan itibaren platform, uygulama API düzeyi 28 veya üstünü hedeflediği anda cleartext’i varsayılan olarak engeller. Düz bir HTTP adresine giden istek, cihazdan tek bir paket bile çıkmadan platform tarafından reddedilir. Hangi hatayı göreceğiniz HTTP kitaplığına bağlıdır: bazen genel bir ağ hatası, bazen zaman aşımı, bazen cleartext’i açıkça adlandıran bir mesaj. Asla yapmadığı şey sunucunuza ulaşmaktır. Android varsayılanı ve alan adıyla sınırlı alternatifi güvenlik yapılandırması kılavuzunda belgeler.

Aynı cihazdaki bir tarayıcı sayfayı hâlâ yükleyebilir ve çoğu kişinin kaçırdığı ipucu budur. Tarayıcılar uygulamanızın ağ güvenliği politikasına tabi değildir.

VPN neden suçlanıyor

Genellikle üç şey aynı anda değişir. Uygulama VPN bağlandıktan sonra başka bir ana makine adı çözümleyebilir, cihaz yeni ve daha yeni bir derlemeye sahip olabilir veya derlemenin kendisi varsayılanı tetikleyen bir hedef API düzeyine geçmiş olabilir. VPN görünür, hedef SDK görünmez, bu yüzden bileti VPN alır.

Ağ yapılandırmasına dokunmadan önce eski ve yeni derlemenin hedef düzeylerini karşılaştırın. 27 veya altını hedefleyen bir uygulama muaf, bu da «benim eski telefonumda çalışıyor» türündeki her raporu açıklıyor.

Expo bayrağı gerçekte nereye düşüyor

Yönetilen bir Expo projesinde app.json dosyasına ayar eklemek bir Android manifestini düzenlemez, çünkü manifesti prebuild ve geliştirme derlemeleri üretir. Ayarı o aşamada yazan şey yapılandırma eklentisidir. Desteklenen yol expo-build-properties olup uygulama yapılandırmasında android altında cleartext seçeneğiyle yapılandırılır.

{
  "plugins": [
    ["expo-build-properties", {
      "android": { "usesCleartextTraffic": true }
    }]
  ]
}

Kod parçası yalnızca eklenti seçeneğini ayarlar; manifest daha sonra üretilir. Bir prebuild veya yeni bir geliştirme istemcisi derlemesi çalıştırın, sonra yeniden test etmeden önce üretilen AndroidManifest.xml dosyasında android:usesCleartextTraffic olup olmadığına bakın, çünkü yalnızca JS ile yeniden yükleme eski manifesti korur. Eklenti sürümünü projenin çalıştığı Expo SDK ile eşleştirin. Eklenti seçenekleri sürümler arasında değişir ve başka bir SDK’dan kopyalanan bir parça sessiz etkisizliğin güvenilir kaynağıdır.

Bare akışı ve daha dar seçenek

Bare React Native için eşdeğeri application öğesindeki android:usesCleartextTraffic ya da cleartext’e yalnızca adlandırılmış alan adları için izin veren bir ağ güvenliği yapılandırmasıdır. Tercih edilmesi gereken biçim alan adıyla sınırlı olanıdır, çünkü iç API’ye izin verir ve geri kalan her şeyi HTTPS’te bırakır. Ayrıca kendi istisna listesini belgeler ve bir gözden geçirenin soracağı kısım tam olarak budur.

İki yaklaşımın hiçbiri adlandırmadığınız bir şey için platformun varsayılanını değiştirmez.

Önce cihaz günlüğünden kanıtlayın

Yapılandırmayı düzenlemeden önce tam hatayı alın. Bağlı bir cihazda adb logcat platformun cleartext reddini gösterir ve bunu tetikleyen bileşeni adlandırır. Reddedilen bir soket, çözülemeyen bir ad veya başarısız bir TLS el sıkışması bambaşka bir yeri işaret eder ve cleartext’i etkinleştirmek uygulamayı boşuna zayıflatır.

Sonra üretimi dürüst tutun. TLS sunamayan bir laboratuvar uç noktası için cleartext kabul edilebilir ve yalnızca planlayabildiğiniz en kısa süre için. API, TLS’i özel ağ içinde sonlandırabiliyorsa sertifikayı cihazın güven deposuna koyun ve cleartext’i kapalı bırakın, çünkü tünel yolu kendi çıkışına kadar şifreler, ötesini değil.

Uç nokta HTTPS ile yanıt vermeye başladığında izni kaldırın, yeniden derleyin ve aynı oturumda hem VPN’de hem normal Wi-Fi’de test edin. Ad çözümlemesi bu iki yol arasında farklı olabilir ve hangisinin doğruyu söylediğini yalnızca ikisi birlikte gösterir.

İlgili makaleler