czy ktoś z iOS 9 beta 1 miał ten problem?
Używam standardowego NSURLConnection, aby połączyć się z usługą internetową, a gdy tylko zostanie nawiązane połączenie z usługą internetową, pojawia się następujący błąd. Działa to obecnie w iOS 8.3
Możliwy błąd beta? wszelkie pomysły lub myśli byłyby świetne! Wiem, że to bardzo wcześnie w rozwoju iOS 9
Oto pełny błąd:
CFNetwork SSLHandshake nie powiodło się (-9824) Niepowodzenie ładowania HTTP NSURLSession / NSURLConnection HTTP (kCFStreamErrorDomainSSL, -9824)
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://mywebserviceurl"]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
źródło
W iOS 10+ ciąg TLS MUSI mieć postać „TLSv1.0”. Nie może to być po prostu „1.0”. (Westchnienie)
Działa następująca kombinacja innych odpowiedzi.
Powiedzmy, że próbujesz połączyć się z hostem (YOUR_HOST.COM), który ma tylko TLS 1.0.
Dodaj je do Info.plist swojej aplikacji
źródło
NSTemporaryExceptionRequiresForwardSecrecy
pomogło mi, dzięki!Aby uzyskać więcej informacji Konfigurowanie wyjątków bezpieczeństwa transportu aplikacji w iOS 9 i OSX 10.11
Ta wysyłka aplikacji z aplikacją Transport Transport Security obejmuje kilka dobrych wskazówek dotyczących debugowania
Awaria ATS
CFNETWORK_DIAGNOSTICS
nscurl
źródło
Jeśli Twój backend korzysta z bezpiecznego połączenia, otrzymasz NSURLSession
musisz sprawdzić konfigurację serwera, aby uzyskać wersję ATS i certyfikat SSL. Informacje:
Zamiast po prostu zezwalać na niezabezpieczone połączenie przez ustawienie
NSExceptionAllowsInsecureHTTPLoads = YES
, zamiast tego musisz zezwolić na obniżone bezpieczeństwo na wypadek, gdyby Twój serwer nie spełniał minimalnego wymagania (v1.2) dla ATS (lub lepiej naprawić stronę serwera).Zezwolenie na obniżone bezpieczeństwo na jednym serwerze
użyj klienta openssl do sprawdzenia certyfikatu i uzyskania konfiguracji serwera za pomocą klienta openssl:
.. znajdź na końcu
Aplikacja Transport Transport Security (ATS) wymaga protokołu Transport Layer Security (TLS) w wersji 1.2.
Wymagania dotyczące łączenia za pomocą ATS:
Aktualizacja: okazuje się, że openssl zapewnia tylko minimalną wersję protokołu Łącza Protokół: TLSv1
źródło
Po dwóch dniach prób i niepowodzeń zadziałał dla mnie ten kod womble
z jedną zmianą, zgodnie z tym postem powinniśmy przestać używać podkluczy powiązanych ze słownikiem NSExceptionDomains tego rodzaju konwencji
I użyj na nowej konwencji
zamiast.
dokumentacja jabłkowa
mój kod
źródło
Innym przydatnym narzędziem jest nmap (instalacja nmap nm)
Daje wynik
źródło
Ten błąd pojawiał się czasami w dziennikach, gdy korzystałem z błędnej / awariowej wersji Cordova na iOS. Zniknęło, gdy zaktualizowałem lub obniżyłem Cordova iOS.
Serwer, z którym się łączyłem, korzystał z protokołu TLSv1.2 SSL, więc wiedziałem, że to nie problem.
źródło
W
.plist
pliku projektu dodaj to uprawnienie:źródło
Składnia konfiguracji Info.plist
źródło
Zaktualizowana odpowiedź (po WWDC 2016):
App Transport Security, czyli ATS, to funkcja wprowadzona przez Apple w iOS 9. Gdy ATS jest włączony, wymusza łączenie aplikacji z usługami sieciowymi za pośrednictwem połączenia HTTPS, a nie niezabezpieczonego HTTP.
Programiści mogą jednak nadal wyłączać ATS i zezwalać aplikacjom na wysyłanie danych przez połączenie HTTP, jak wspomniano w powyższych odpowiedziach. Pod koniec 2016 r. Apple wprowadzi obowiązek korzystania z ATS dla wszystkich programistów, którzy chcą przesłać swoje aplikacje do App Store. połączyć
źródło
Testowane przeze mnie urządzenie miało nieprawidłowy czas. Kiedy więc próbowałem uzyskać dostęp do strony z certyfikatem, który wkrótce się skończy, odmówiłby dostępu, ponieważ urządzenie wygasło. Aby to naprawić, ustaw odpowiedni czas na urządzeniu!
źródło