Charles proxy'yi Android 7 nugat ile nasıl çalıştırabilirim?


102

Android 7, sertifikaların işlenme biçiminde bazı değişiklikler getirdi ( http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html ) ve bir şekilde Charles proxy'mi artık çalıştıramıyorum.

Network_security_config.xml’im:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

Hata ayıklama modunda çalışıyorum. Ama ne olursa olsun anlıyorum javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found..

Söylemeye gerek yok, bir pfxsertifika yükledim Settings -> Security -> Install from storage. Sertifika içeri giriyor User Credentialsama değil Trusted credentials -> User. Lolipop cihazımda sertifikalar listeleniyor.

Okhttp3'ü HTTP kitaplığı olarak kullanıyorum.

Neyi yanlış yaptığım hakkında bir fikrin var mı?


1
Hızlı bir test olarak, userbirini içine eklemeyi / taşımayı deneyin <base-config>ve bunun önemli olup olmadığına bakın. Olmamalı, ama denemek sadece bir dakikanızı alacak.
CommonsWare

Charles CA'sı geliştirici.android.com/ training/articles/security-config.html'de Charles için açık CA eklemeniz gerekmiyor muydu: 'Ek CA'lara Güvenmek' Charles CA kendi oluşturduğu ve Android Sistem güven zinciri?
Morrison Chang

@Morisson Chang: Charles CA'yı uygulamaya yerleştirmek istemiyorum, eskiden yaptığım gibi geliştirme telefonuma manuel olarak ekleyebilmek istiyorum. GönderenSettings -> Security -> Install from storage
mbonnin

1. Uygulamanızın AndroidManifest.xml dosyasında network_security_config.xml'ye nasıl referans veriyorsunuz? 2. .pfx dosyasını bağlar mısınız? Sadece CA sertifikasını içerdiğini (özel anahtarlar içermediğini) ve bu nedenle yayınlamada sorun olmadığını düşünüyorum. Soruyorum çünkü .pfx bir özel anahtar içeriyorsa, bunun bir istemci sertifika dosyası olduğu varsayılır ve bu nedenle dosyadaki CA, sunucu kimlik doğrulaması için güvenilir olarak yüklenmez.
Alex Klyubin

1
@AlexKlyubin hurra, şimdi çalışıyor :). Sanırım Charles'ımı veya uygulamamı veya başka bir şeyi yeniden başlatmam gerekiyordu. Kafam karıştı çünkü aynı .pfx dosyasını nugattan önce sayısız android cihaza yükledim ve bunlar iyi tanındı. Ama şimdi her şey yolunda. Onaylayabilmem için bir cevap yazabilir misin?
mbonnin

Yanıtlar:


26

OP için yorumların sorun giderme zincirine dayalı olarak yanıt, sertifika + özel anahtarını değil, yalnızca proxy'nin CA sertifikasını güvenilir olarak yüklemektir.

Soruna iki faktör neden oldu:

  1. Yalnızca MiTM proxy'sinin CA sertifikasını değil, aynı zamanda özel anahtarını da yüklemek (böylece cihazdaki VPN uygulamalarının diğer uygulamalardan gelen MiTM ağ trafiğinin şifresini çözmesini sağlar). Cihazda MiTM proxy'nin özel anahtarına ihtiyacınız yoktur.

  2. Android Nougat Settings -> Security -> Install from storage, sertifikalara ek olarak özel bir anahtar içeren dosyalar için akış davranışında değişiklik . Davranıştaki bu değişiklik yukarıdaki sorunun maskesini düşürdü.

Nougat'tan önce, Settings -> Security -> Install from storagesertifikalara ek olarak özel bir anahtar içeren dosyalar için akış, sertifikaları yanlışlıkla sunucu kimlik doğrulaması için güvenilir olarak (örneğin, HTTPS, TLS, böylece MiTM'nizin başarılı olmasını sağlar) yükledi ve istemci sertifikaları için doğru şekilde kurulmasına ek olarak bu Android cihazı sunucularda doğrulanıyor. Nougat'ta hata düzeltildi ve bu sertifikalar artık sunucu kimlik doğrulaması için güvenilir olarak yüklenmiyor. Bu, istemci kimlik doğrulama bilgilerinin sunuculara bağlantıların güvenliğini etkilemesini (zayıflatmasını) önler. Senaryonuzda bu, MiTM'nizin başarılı olmasını engeller.

Konuları karmaşıklaştıran şey Settings -> Security -> Install from storage, kullanıcının bir istemci kimlik doğrulama kimlik bilgisi (özel anahtar + sertifika zinciri) veya sunucu kimlik doğrulama güven bağlantısı (yalnızca bir CA sertifikası - özel anahtar gerekmez) yükleyip yüklemediğini belirtmesi için açık bir yol sağlamamasıdır. . Sonuç olarak Settings -> Security -> Install from storageakış, bir özel anahtar belirtilirse bunun bir istemci / kullanıcı kimlik doğrulama kimlik bilgisi olması gerektiğini varsayarak, istemci / kullanıcı kimlik doğrulaması kimlik bilgileriyle mi yoksa sunucu kimlik doğrulaması güven bağlantısıyla mı uğraştığını tahmin eder. Sizin durumunuzda, sunucu kimlik doğrulaması güven bağlantısı yerine bir istemci / kullanıcı kimlik doğrulama kimlik bilgisi yüklediğinizi yanlış bir şekilde varsaydı.

Not: Ağ Güvenliği Yapılandırmanızla ilgili olarak, uygulamayı muhtemelen hata ayıklama modunda "sistem" güven bağlantılarına da güvenecek şekilde yapılandırmalısınız (hata ayıklama geçersiz kılmalar bölümü). Aksi takdirde, uygulamanın hata ayıklama yapıları, bağlantılar Android cihazda CA sertifikası güvenilir olarak yüklenmiş bir proxy tarafından MiTM'lenmedikçe çalışmaz.


1
PS ile ilgili olarak: belgeler diyor Trust anchors specified in debug-overrides are added to all other configurations. Yani 'base-config'e eklendiği ve tamamen değiştirilmediği izlenimine kapıldım?
mbonnin

Oh, haklısın. Hata ayıklama geçersiz kılmalarında "sistem" güven bağlantılarını açıkça listelemenize gerek yoktur.
Alex Klyubin

4
Bu cevap net değil. Lütfen aşağıdaki @ stkent'in cevabına bakınız.
Adam Hurwitz

4
Kabul edin Bu cevabın neler olduğunu açıklıyor, ancak kişinin hangi adımları atması gerektiği çok belirsiz.
StarWind 0

116

Çözüm .p12 kullanmamaktır , sadece Chrome ile (wifi üzerinde yapılandırılmış proxy ile) http://charlesproxy.com/getssl adresine gidin ve indirilen .pem dosyasını yükleyin .

Android 7.0 çalıştıran Nexus 5X'imde tam olarak aynı sorunu yaşadım. Charles 3.11.5'ten daha önce .p12 ihraç edilmişti (Yardım-> SSL Proxying-> Charles Kök sertifikasını ve Özel anahtarı Dışa Aktar). .P12'yi telefondan yüklemeyi denediğimde (Ayarlar-> Güvenlik-> Depodan yükle) yalnızca "Kullanıcı kimlik bilgileri" altında görünüyor ve hiçbir zaman "Güvenilir kimlik bilgileri" altında görünüyor ve elbette Charles proxy ile SSL çalışmıyor.

Android 7.0 için toplam "nasıl yapılır" şu şekilde olacaktır:

  1. WiFi + proxy'yi yapılandırın (Charles bunu nasıl gerektirir). Bağlayın.
  2. Cihazda, Chrome ile http://charlesproxy.com/getssl adresine gidin , .pem indirme isteğini kabul edin, ardından "aç" a basın, "Sertifika yükleyici" uygulamasını başlatır. Sertifikayı "VPN ve uygulamalar" olarak yüklemek için kullanın.
  3. Özniteliği Manifest.xml android:networkSecurityConfig="@xml/network_security_config"adresine koyun<application>
  4. İlk gönderideki içerikle res / xml / network_security_config.xml oluşturun (tamamen doğrudur).
  5. Charles'ı ve uygulamayı başlatın ve eğlenin.

PS Cihazdaki tarihi / saati kontrol edin. Doğru olmalı.


2
Bu harika yanıtla ilgili önemli bir not: Uygulamanız API 23 veya daha düşük bir sürümü hedefliyorsa, 3. ve 4. adımlara ihtiyacınız yoktur. Aslında, API 23'e sahipseniz ağ güvenliği-yapılandırma öğelerini derleyemezsiniz. Veya daha düşük.
David Ferrand

1
Bu, Android 7.0 için harika bir çözümdür. Charles Proxy'nin resmi bilgilerinden çok daha net.
Adam Link

3
Muhtemelen sadece ben ama bu adımlar 7.1.1'de artık benim için çalışmıyor. Yakın zamanda bir güncelleme yaptım
satyajit

@satyajit Bu çözüm benim için bir Google Pixel'de Android 7.1.1'de çalışıyor.
Dick Lucas

3. ve 4. adımlar ile veya olmadan?
satyajit


-1

Android 7.1.1 kullanıyorum, cihazımda (OnePlus One) nasıl kurulum yapıyorum - manifest değişikliği olmadan (uygulamam için API 21'i hedefliyordum):

Charles Proxy'de:

  1. Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser. Bu adımlar size proxy IP'sini ve bağlantı noktası numarasını ve ayrıca charles proxy SSL'yi indirmeniz gereken yerin bağlantısını verir.

Telefonunda:

  1. Wifi Settings > Modify Network > Advanced Options. Proxy'yi olarak ayarlayın Manualve Charles'tan aldığınız IP ve Port numarasını Proxy hostnameve Proxy portsırasıyla girin.

  2. (İSTEĞE BAĞLI) Charles tarafından daha önce sağlanan chls.pro/ssl bağlantısına erişebilir veya erişemeyebilirsiniz . Cihazımda her zaman ağ bağlantım olmadığı konusunda bilgilendirildim. Charlesproxy.com'u Bypass proxy foralana ekledim .

  3. Tarayıcınızda, 3. adımdaki bağlantıya gidin ve gereken sertifikayı indirin (Chrome'da çalışmıyorsa, Dolphin Browser'ı indirin). Sertifikanıza herhangi bir adla ad verebilirsiniz.

Charles Proxy'de:

  1. Ayarlarınız varsayılan olarak sizden uzak bağlantılar isterse, ya Allowda Denytelefonunuza proxy'yi kullanma uyarısı almalısınız .

Artık Charles'ı Nougat 7.1.1'de kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.