Bezpieczeństwo transportu zablokowało cleartext HTTP
Jakie ustawienie muszę umieścić w moim info.plist
, aby włączyć tryb HTTP zgodnie z poniższym Komunikatem o błędzie?
Bezpieczeństwo transportu zablokowało zasób cleartext HTTP (http://) załaduj, ponieważ jest niepewny. Tymczasowe wyjątki można skonfigurować poprzez informacje o Twojej aplikacji.plik plist.
Załóżmy, że moja domena to example.com
.
23 answers
Jeśli używasz Xcode 8.0 i Swift 3.0 lub Swift 2.2 lub nawet Objective C:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 12:37:58
Użycie:
Musisz ustawić nsallowsarbitraryloads klucz YES Pod nsapptransportsecurity słownik w swoim .plik plist.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 19:04:55
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-14 20:35:12
Zobacz post na forumaplikacja bezpieczeństwo transportu?.
Także Strona Konfigurowanie WYJĄTKÓW Bezpieczeństwa Transportu aplikacji w systemach iOS 9 i OSX 10.11.
Na przykład możesz dodać konkretną domenę, taką jak:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
Opcja leniwa to:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Uwaga:
info.plist
jest plikiem XML, więc możesz umieścić ten kod mniej więcej w dowolnym miejscu wewnątrz pliku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 03:43:46
Jest to konfiguracja pozwalająca domenie specific używać HTTP zamiast HTTPS:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key> <!--Include your domain at this line -->
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
NSAllowsArbitraryLoads
musi być false
, ponieważ uniemożliwia wszystkie niebezpieczne połączenie, ale lista wyjątków umożliwia połączenie z niektórymi domenami bez HTTPS.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-15 14:28:35
Jest to szybkie obejście (ale nie zalecane), aby dodać to w pliście:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Co oznacza (według dokumentacji Apple):
Naprawdę polecam linki:NSAllowsArbitraryLoads
Wartość logiczna używana do wyłączania zabezpieczeń transportu aplikacji dla domen niewymienionych w słowniku NSExceptionDomains. Wymienione domeny używają ustawień określonych dla tej domeny.Domyślna wartość NO wymaga domyślnego zachowania bezpieczeństwa transportu aplikacji dla wszystkich znajomości.
- Uwaga techniczna Apple
- W 2015 roku, po raz pierwszy w historii, pojawiła się nowa wersja systemu Windows.]}
- W 2015 r. odbyła się sesja 711 (Networking with NSURLSession)
- blog post wysyłanie aplikacji z zabezpieczeniem transportu aplikacji
XML (w pliku Info.plist) poniżej "will": {]}
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
Nie zezwala na dowolne wywołania dla wszystkich stron, ale dla PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
pozwoli, aby połączenia korzystały z protokołu HTTP.
Do powyższego XML można dodać:
<key>NSIncludesSubdomains</key>
<true/>
Jeśli chcesz zezwolić na niebezpieczne połączenia dla subdomen o podanym adresie.
Najlepszym podejściem jest blokowanie wszystkich dowolnych obciążeń (ustawionych na false) i dodawanie wyjątków, aby zezwalać tylko na adresy, o których wiemy, że są w porządku.
Dla zainteresowanych czytelników
2018 Aktualizacja:
Firma Apple nie zaleca wyłączania tej funkcji - więcej informacji można znaleźć w 207 session WWDC 2018 z więcej wyjaśnieniami dotyczącymi bezpieczeństwaPozostawienie oryginalnej odpowiedzi ze względów historycznych i fazy rozwoju
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-05 11:09:29
Dla tych z Was, którzy chcą mieć więcej kontekstu na dlaczego dzieje się tak, oprócz tego, jak to naprawić, przeczytaj poniżej.
Po wprowadzeniu systemu iOS 9, aby poprawić bezpieczeństwo połączeń między aplikacją a usługami sieciowymi, bezpieczne połączenia między aplikacją a jej usługami sieciowymi muszą być zgodne z najlepszymi praktykami. Najlepsze praktyki są egzekwowane przez App Transport Security do:- zapobiec przypadkowemu ujawnieniu, i
- zapewnij domyślne zachowanie, które jest bezpieczne.
Jak wyjaśniono w App Transport Security Technote , podczas komunikacji z Twoją usługą internetową, bezpieczeństwo transportu aplikacji ma teraz następujące wymagania i zachowanie:
Innymi słowy, twoje żądanie usługi internetowej powinno: a.) używać HTTPS i B.) być szyfrowane przy użyciu protokołu TLS v1. 2 z zachowaniem tajemnicy przesyłania.Serwer musi obsługiwać co najmniej protokół Transport Layer Security (TLS) w wersji 1.2.
- szyfry połączeń są ograniczone do tych, które zapewniają poufność transmisji (patrz lista szyfrów poniżej.)
- certyfikaty muszą być podpisywane przy użyciu algorytmu skrótu SHA256 lub lepszego, z kluczem 2048-bitowym lub większym RSA lub 256-bitowym lub klawisz greater Elliptic-Curve (ECC).
- nieprawidłowe certyfikaty powodują awarię i brak połączenia.
Jednak, jak wspomniano w innych postach, można zastąpić ten nowy zachowanie Z Bezpieczeństwa Transportu aplikacji poprzez określenie Niezabezpieczonej domeny w Info.plist
aplikacji.
Aby nadpisać, musisz dodać NSAppTransportSecurity
> NSExceptionDomains
właściwości słownika do twojego Info.plist
. Następnie dodasz domenę swojego serwisu internetowego do słownika NSExceptionDomains
.
Na przykład, jeśli chcę ominąć zachowanie bezpieczeństwa transportu aplikacji dla usługi internetowej na hoście www.yourwebservicehost.com wtedy zrobiłbym co następuje:
Otwórz aplikację w Xcode.
Znajdź plik
Info.plist
w Nawigatorze projektu i kliknij prawym przyciskiem myszy na nim i wybierz Otwórz jako > Kod źródłowy opcja menu. Plik listy właściwości pojawi się w prawym okienku.Umieść następujący blok właściwości wewnątrz głównego słownika właściwości(pod pierwszym
<dict>
).
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Jeśli chcesz podać wyjątki dla dodatkowych domen, dodaj kolejną właściwość słownika poniżej NSExceptionDomains
.
Aby dowiedzieć się więcej o kluczach, o których mowa powyżej, przeczytaj wspomnianą już technote.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 03:52:53
Nie lubię edytować plist bezpośrednio. Można go łatwo dodać do plist używając GUI:
- Kliknij na Info.plist w Nawigatorze po lewej.
-
Teraz zmień dane w obszarze głównym:
- w ostatniej linii dodaj +
- wprowadź nazwę grupy: ustawienia bezpieczeństwa transportu aplikacji
- Kliknij prawym przyciskiem myszy na grupie i wybierz
Add Row
- Enter Zezwalaj Na Dowolne Ładowanie
- Ustaw wartość po prawej stronie na Tak
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-17 19:37:37
Istnieją na to dwa rozwiązania:
Rozwiązania 1 :
- w pliku
Info.plist
Dodaj słownik z kluczem 'NSAppTransportSecurity
' - Dodaj kolejny element w słowniku za pomocą klucza
'Allow Arbitrary Loads'
Plist
struktura powinna wyglądać tak, jak pokazano na poniższym obrazku.
Rozwiązanie 2 :
- w pliku
Info.plist
Dodaj słownik z kluczem 'NSAppTransportSecurity
' - Dodaj kolejny element w słowniku za pomocą klucza '
NSExceptionDomains
' - Dodaj element z kluczem
'MyDomainName.com'
typu NSDictionary - Dodaj element z kluczem "
NSIncludesSubdomains
" TypuBoolean
i ustaw wartość jakoYES
- Dodaj element z kluczem "
NSTemporaryExceptionAllowsInsecureHTTPLoads
" typuBoolean
i ustaw wartość jakoYES
Plist
struktura powinna wyglądać tak, jak pokazano na poniższym obrazku.
Rozwiązanie 2 jest preferowane, ponieważ pozwala tylko na wybraną domenę, podczas gdy rozwiązanie 1 pozwala na wszystkie niebezpieczne połączenia HTTP.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-10 12:51:16
Bezpieczeństwo transportu jest dostępne w systemie iOS 9.0 lub nowszym. Możesz mieć to Ostrzeżenie podczas próby wywołania WS wewnątrz aplikacji:
Bezpieczeństwo transportu aplikacji zablokowało ładowanie zasobów cleartext HTTP (http://), ponieważ jest niebezpieczne. Tymczasowe wyjątki można skonfigurować za pomocą informacji aplikacji.plik plist.
Dodanie następujących informacji.plist wyłączy ATS:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 19:09:10
Przykład Rozwoju
Oto zrzut ekranu plist, który utrzymuje ATS nienaruszony (=bezpieczny) , ale pozwala na połączenia z localhost mogą być wykonane przez HTTP zamiast HTTPS . Działa w Xcode 7.1.1.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 19:23:41
Zastanawianie się, jakich ustawień użyć, może być wykonywane automatycznie, jak wspomniano w Ten technote :
/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-07 08:29:36
Przejdź do informacji.plist
- Kliknij prawym przyciskiem myszy na pustym miejscu i kliknij Dodaj wiersz
- Wpisz nazwę klucza jako NSAppTransportSecurity, pod nią
- Select Exception Domains, Add a new item to this
- Zapisz nazwę domeny, do której należy uzyskać dostęp
- Zmień typ domeny z String Na słownik, Dodaj nową pozycję
- NSTemporaryExceptionAllowsInsecurehttploads, który będzie logiczny z wartością true.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 06:28:32
Według Apple, ogólne wyłączenie ATS doprowadzi do odrzucenia aplikacji, chyba że masz ku temu dobry powód. Nawet wtedy powinieneś dodać wyjątki dla domen, do których możesz bezpiecznie uzyskać dostęp.
Apple ma doskonałe narzędzie, które mówi dokładnie, jakich ustawień użyć: w Terminalu wprowadź
/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever
I nscurl sprawdzi, czy to żądanie nie powiedzie się, a następnie spróbuje różnych ustawień i powie Ci dokładnie, który z nich przechodzi i co zrobić. Na przykład dla niektórych adresów URL stron trzecich że odwiedzam, to polecenie mi mówi, że ten słownik przechodzi:
{
NSExceptionDomains = {
"www.example.com" = {
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Aby odróżnić witryny własne od stron trzecich, które są poza Twoją kontrolą, użyj na przykład klucza nsthirdpartyexceptionrequires Forwardsecrecy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 04:03:34
Użycie:
Dodaj nowy element, NSAppTransportSecurity, w pliku plist z typem Słownik, Następnie dodaj element podrzędny NSAllowsArbitraryLoadsw słowniku typu Booleani ustaw wartość bool YES. To mi pasuje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 19:10:18
W dniu 2015-09-25 (po aktualizacji Xcode w dniu 2015-09-18):
Użyłam metody nie leniwej, ale nie zadziałała. To są moje próby.
Pierwszy,
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.xxx.yyy.zzz</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
I po drugie,
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.xxx.yyy.zzz</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
W końcu użyłem metody leniwej:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
To może być trochę niepewne, ale nie mogłem znaleźć innych rozwiązań.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 19:30:54
Uwaga: domena WYJĄTKÓW w pliście powinna być pisana małymi literami.
Przykład: nazwałeś swój komputer "MyAwesomeMacbook" w Ustawieniach - >udostępnianie; Twój serwer (do celów testowych) działa na MyAwesomeMacbook.local:3000, a Twoja aplikacja musi wysłać zapytanie do http://MyAwesomeMacbook.local: 3000 / files ..., Twój plist musisz podać " myawesomemacbook.lokalne " jako domena wyjątku.
--
Twoje informacje.plist będzie zawierać...<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>myawesomemacbook.local</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 18:17:38
Aktualizacja dla Xcode 7.1, problem 27.10.15:
Nowa wartość w Info.plist to "ustawienia bezpieczeństwa transportu aplikacji". Stąd słownik powinien zawierać:
- Zezwalaj na dowolne Ładowanie = tak
- domeny WYJĄTKÓW (Wstaw tutaj swoją domenę http)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 19:25:48
Może warto wspomnieć, jak się tam dostać...
Info.plist jest jednym z plików poniżej głównego.storyboard lub viewController.swift.
Gdy klikniesz na niego za pierwszym razem, zwykle jest w formacie tabeli, więc kliknij prawym przyciskiem myszy plik i "otwórz jako" kod źródłowy, a następnie dodaj poniższy kod pod koniec, tj.:
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
Kopiuj Wklej kod tuż powyżej
"</dict>
</plist>"
Który jest na końcu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 19:27:11
Dla tych, którzy przybyli tutaj próbując znaleźć powód, dla którego ich WKWebView jest zawsze biały i nic nie ładuje (dokładnie tak, jak opisano tutaj Jak uzyskać WKWebView do pracy w swift i dla aplikacji macOS) :
Jeśli wszystkie powyższe informacje nie działają dla Ciebie sprawdź oczywiste: ustawienia piaskownicy
Jako nowy w swift i cocoa, ale dość doświadczony w programowaniu spędziłem około 20 godzin, aby znaleźć To rozwiązanie. Żadna z dziesiątek hipster-iOS-tutoriale ani Apple keynotes-nic nie wspomina o tym małym checkboxie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 14:40:57
Dla Cordova, jeśli chcesz dodać go do ios.json, wykonaj następujące czynności:
"NSAppTransportSecurity": [
{
"xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
}
]
I powinno być wewnątrz:
"*-Info.plist": {
"parents": {
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-21 12:41:01
Użycie NSExceptionDomains
może nie stosować efektu jednocześnie ze względu na to, że strona docelowa może ładować zasoby (np. pliki js
) z zewnętrznych domen nad http
. Można to również rozwiązać dodając te zewnętrzne domeny do NSExceptionDomains
.
Aby sprawdzić, których zasobów nie można załadować, spróbuj użyć zdalnego debugowania. Oto samouczek: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-14 06:12:50
Jak wielu zauważyło, jest to problem z funkcją, która pochodzi z iOS 9.0. Dodali coś o nazwie bezpieczeństwo transportu aplikacji i ja też byłem zirytowany, gdy zepsuł moje aplikacje.
Możesz go opatrzyć kluczem NSAllowsArbitraryLoads na YES pod słownikiem nsapptransportsecurity w Twoim .plist, ale ostatecznie będziesz musiał ponownie napisać kod, który tworzy Twoje adresy URL, aby utworzyć prefiks HTTPS://.
Apple ponownie napisał klasę NSUrlConnection w iOS 9.0. Możesz przeczytać o tym w NSURLConnection.
W Przeciwnym Razie być może będziesz musiał wycofać się z iOS 9.0, dopóki nie będziesz miał czasu na wdrożenie właściwego rozwiązania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 19:28:50