Mam bardzo specyficzny problem z SSL na moim Androidzie. Jeśli staram się odwiedzić daną stronę internetową za pomocą kodu, pojawia się następujący błąd:Problem z SSL z Androidem
SSL handshake failure: Failure in SSL library, usually a protocol error
error:140773F2:SSL routines:SSL23_GET_SERVER_HELLO: sslv3 alert unexpected message (external/openssl/ssl/s23_cInt.c:500 0xaf076228:0x00000000)
uzyskać to niezależnie od budowy ... Próbowałem go na poziomie API 1,5, 1,6, 2,2, i 4,0 i za każdym razem otrzymali ten sam wynik.
Po pewnym rozwiązywania problemów Próbowałem znaleźć na stronie internetowej za pośrednictwem przeglądarki i mam następujący błąd:
Data connectivity problem
A secure connection could not be established.
Oto rzeczy, choć ... strona otwiera się dobrze w przeglądarkach systemu Windows (testowane na Firefox , IE i Chrome). Otwiera się również dobrze na urządzeniach z iOS, które używają tego samego zestawu webowego, co Android, co jest dziwne. Strona działa również bezproblemowo w przeglądarce Opera Mini.
Próbowałam obejść przez dodanie certyfikatu klienta do magazynu kluczy i ignorowanie nieprawidłowych certyfikatów klienta, bez żadnych rezultatów. Jednak wydaje się, że sam certyfikat nie jest problemem.
Jestem w impasie. Czy ktokolwiek może udzielić wskazówek, jak mogę to osiągnąć?
Początkowo próbowałem do niego dostęp za pośrednictwem HttpClient. Po wypróbowaniu kilku rzeczy, aby to zadziałało (wyłączenie weryfikacji certyfikatu SSL, dodanie certyfikatu do mojego lokalnego magazynu kluczy itp.) Stwierdziłem, że problem nie dotyczy samego certyfikatu. Następnie spróbowałem uzyskać do niego dostęp za pośrednictwem przeglądarki, ale też tam nie działało. Nie próbowałem WebView, ponieważ zakładam, że jeśli przeglądarka nie może się połączyć, WebView też nie może. Wróciłem i przyjąłem kilka odpowiedzi. Powodem niskiej akceptacji jest to, że większość odpowiedzi nie rozwiązała moich problemów. –
Problem polega na tym, że twój serwer odpowiada tylko na jedną wersję SSL, SSL v3. Jeśli używasz HttpClient, musisz utworzyć własną SocketFactory i ręcznie ustawić włączoną wersję protokołu. Coś podobnego jest opisane tutaj: http://developer.android.com/reference/javax/net/ssl/SSLSocket.html#setEnabledProtocols (java.lang.String []) –
Witam Nikolay, po pewnych badaniach znalazłem dokładnie co opisałeś. Serwer NIE obsługuje TLS, z którym to aplikacja próbuje się uzgadniać. Badam teraz, jak wymusić SSLv3, ale nie mam dużo szczęścia (jest to nieco bardziej zaawansowane, niż przywykłem do mojej ograniczonej obsługi Java). Czy uważasz, że możesz podać mi bardzo prosty fragment kodu? –