2013-03-01 19 views
6

Pracuję nad projektem, który pobiera obrazy z różnych serwerów (http i https).Połączenie HTTP, różnice między Androidem 2.3 a 4

Znalazłem this usefull Q/A, aby uniknąć problemu z No peer certificate error w systemie Android 2.3, ale nie rozumiem, dlaczego w systemie Android 4 (> 3) ten problem ("No peer certificate error") nie był prezentowany.

Proszę mnie poprawić jeśli się mylę:

  • W Androidzie 2.3 połączenie HTTPS wykonuje całość sprawdza certyfikat (i uściski dłoni);
  • W systemie Android> 3 połączenie HTTPS jest ustanawiane, nawet jeśli uzgadnianie się nie powiedzie (np. Moja aplikacja, jako członek sieci, nie ma certyfikatu).

Jakie są różnice między tymi wersjami Androida? Dlaczego muszę Zaufaj wszystkim w systemie Android 2.3, a nie w systemie Android 4?

Dlaczego w systemie Android 2.3 pojawia się następujący wyjątek: "javax.net.ssl.SSLPeerUnverifiedException: No peer certificate error" podczas gdy na Androidzie 4 wszystko działa poprawnie i połączenie zostało nawiązane?

Czy wszystko związane z SNI Server Name Indication, wprowadzone w Android Honeycomb?

+0

Chcesz rozwiązanie lub różnicę? –

+0

Różnica między wersją Androida. SO jest pełne rozwiązań. – StarsSky

+0

Czy Twój kod działa w wersji 2.3? –

Odpowiedz

2

Twoja instytucja certyfikująca prawdopodobnie nie jest wymieniona w wersji 2.3.3 Androida, ale jest w wersji 4.x. Aby się upewnić, sprawdź magazyn kluczy na obu urządzeniach.

Za pomocą ADB z wiersza poleceń można zrzucić plik kluczy Androida do pliku i sprawdzić, czy ten wystawca jest dostępny w magazynie kluczy (może wymagać root). ADB /system/etc/security/cacerts.bks ciągnąć cacerts.bks

Pobierz i zainstaluj Portecle (od: http://portecle.sourceforge.net/) Wybierz Plik/Otwórz kluczy ... i wybierz plik cacerts.bks. Wybierz Narzędzia/Magazyn kluczy i skopiuj te informacje do edytora tekstów, aby wyszukać numer CN podany w certyfikacie znalezionym w przeglądarce internetowej. W moim przypadku nie mogłem znaleźć jednego z "Cybertrust Public SureServer SV CA".

Przejdź do strony, której chcesz użyć w przeglądarce internetowej na komputerze, używając https://example.website.com/ i sprawdź, kim jest CN. Porównaj to z magazynem kluczy, jak pokazano powyżej. Jeśli nie ma go w magazynie kluczy, musisz go dodać.

UWAGA: Telefony z systemem Android 4.0 mają inną metodę przechowywania certyfikatów i nie używają pliku cacerts.bks wymienionego poniżej. Dla nich powinieneś być w stanie otworzyć żądaną stronę https w przeglądarce i dodać w ten sposób żądane certyfikaty.

Miałem problemy z połączeniem z Facebookiem i RedBoxem. Aby naprawić mój problem i zaktualizować certyfikaty telefoniczne Android 2.3.3, skopiowałem je z emulatora Androida 3.2 i umieściłem to na moim telefonie:

  1. Utwórz i uruchom urządzenie wirtualne z systemem Android 3.2.
  2. Skopiuj plik cacerts.bks z emulatora (upewnij się, że inne urządzenie nie jest podłączone). adb pull /system/etc/security/cacerts.bks cacerts.bks
  3. Odłącz emulator.
  4. Podłącz urządzenie do aktualizacji (musi być rootem). Konieczne może być ponowne ustawienie folderu/system jako rw dla funkcji odczytu/zapisu. Za kwestie montażu zobaczyć: this link
  5. Zapisz kopię starego pliku cert z urządzeniem: ADB /system/etc/security/cacerts.bks ciągnąć cacerts.bks.old
  6. Put zaktualizowany plik cert na swoje urządzenie adb push cacerts.bks/system/etc/security/
  7. Uruchom ponownie urządzenie
  8. Ponownie podłącz i sprawdź, czy został załadowany nowy plik cacert.
+0

Certyfikat jest obecny: CN = Publiczny główny urząd certyfikacji VeriSign Class 3 - G5, OU = "(c) 2006 VeriSign, Inc. - Tylko do autoryzowanego użytku", OU = VeriSign Trust Network, O = "VeriSign, Inc. ", C = US StarsSky

+0

@StarsSky Czy możesz podać adres strony, z którą współpracujesz? – RightHandedMonkey

+0

Wygląda na to, że w moim kwystore brakuje pośredniego certyfikatu: VeriSign Class 3 International Server CA - G3. Czy to może być powód? – StarsSky

Powiązane problemy