Odkąd zaktualizowałem mój istniejący projekt do iOS 9, ciągle otrzymuję błąd:
Wystąpił błąd SSL i nie można nawiązać bezpiecznego połączenia z serwerem.
Odkąd zaktualizowałem mój istniejący projekt do iOS 9, ciągle otrzymuję błąd:
Wystąpił błąd SSL i nie można nawiązać bezpiecznego połączenia z serwerem.
Odpowiedzi:
W przypadku iOS9 Apple podjął radykalną decyzję z iOS 9, wyłączając cały niezabezpieczony ruch HTTP z aplikacji iOS, jako część App Transport Security (ATS) .
Aby po prostu wyłączyć ATS, możesz wykonać następujące kroki, otwierając Info.plist i dodać następujące wiersze:
źródło
Mimo że zezwolenie na dowolne ładowanie (
NSAllowsArbitraryLoads = true
) jest dobrym obejściem, nie należy całkowicie wyłączać ATS, ale raczej włączyć połączenie HTTP, na które chcesz zezwolić:źródło
iOS 9 wymusza na połączeniach używających HTTPS TLS 1.2, aby uniknąć ostatnich luk w zabezpieczeniach. W iOS 8 obsługiwane były nawet nieszyfrowane połączenia HTTP, więc starsze wersje TLS również nie sprawiały problemów. Aby obejść ten problem, możesz dodać ten fragment kodu do swojej Info.plist:
* w odniesieniu do App Transport Security (ATS)
źródło
Jeśli kierujesz tylko reklamy na określone domeny, możesz spróbować dodać to w Info.plist swojej aplikacji:
źródło
Wygląda na to, że iOS 9.0.2 przerywa żądania do prawidłowych punktów końcowych HTTPS. Moje obecne podejrzenie jest takie, że wymaga certyfikatów SHA-256 lub nie powiedzie się z tym błędem.
Aby odtworzyć, sprawdź swój UIWebView za pomocą safari i spróbuj przejść do dowolnego punktu końcowego HTTPS:
Teraz spróbuj przejść do Google (ponieważ mają oczywiście certyfikat SHA-256):
Dodanie wyjątku do bezpieczeństwa transportu (zgodnie z powyższą odpowiedzią @ stéphane-bruckert) działa, aby to naprawić. Zakładam też, że całkowicie wyłączam
NSAppTransportSecurity
by działało, chociaż przeczytałem, że całkowite wyłączenie może zagrozić twojej recenzji aplikacji.[EDYTUJ] Zauważyłem, że zwykłe wyliczenie domen, z którymi się
NSExceptionDomains
łączę w dyktandzie, rozwiązuje ten problem, nawet jeśli pozostawiamNSExceptionAllowsInsecureHTTPLoads
wartość true. : \źródło
Problemem jest certyfikat ssl po stronie serwera. Albo coś przeszkadza, albo certyfikat nie pasuje do usługi. Na przykład, gdy witryna ma certyfikat ssl dla www.moja_domena.com, podczas gdy używana usługa działa pod adresem myservice.mydomain.com. To inna maszyna.
źródło
Otrzymuję ten sam błąd, kiedy określam mój adres URL HTTPS jako: https://www.mywebsite.com . Jednak działa dobrze, gdy określę to bez trzech W jako: https://mywebsite.com .
źródło
Projekt Xcode -> goto info.plist i kliknij przycisk +, a następnie Dodaj (ustawienia zabezpieczeń transportu aplikacji) Rozwiń, Zezwalaj na dowolne obciążenia ustawione na TAK. Dzięki
źródło
Mój problem był
NSURLConnection
i został wycofany w iOS9, więc zmieniłem cały interfejs API naNSURLSession
i to rozwiązało mój problem.NSURLConnection przestarzałe w iOS9
źródło
W moim przypadku napotkałem ten problem w moim symulatorze, ponieważ data mojego komputera była spóźniona. Więc sprawdź ten przypadek, gdy napotkasz błąd SSL.
źródło
Podczas odtwarzania pojawiał się błąd poniżej
Upewniłem się, że dodałem wpis w domenach wyjątków w pliku plist, a NSAllowsArbitraryLoads jest ustawione na true i nadal widzę błąd.
Wtedy zdałem sobie sprawę, że gram w URL z https a nie http.
Ustawiłem adres URL filmu na http i problem został rozwiązany.
źródło
Otrzymywałem ten błąd w przypadku niektórych połączeń sieciowych, a innych nie. Byłem podłączony do publicznego Wi-Fi. Wydawało się, że darmowe Wi-Fi manipuluje niektórymi adresami URL i stąd błąd.
Po podłączeniu do LTE ten błąd zniknął!
źródło