Dla tych z Was, którzy chcą więcej informacji na temat tego, dlaczego tak się dzieje, oprócz tego, jak to naprawić, przeczytaj poniżej.
Wraz z wprowadzeniem systemu iOS 9, aby poprawić bezpieczeństwo połączeń między aplikacją a usługami internetowymi, bezpieczne połączenia między aplikacją a usługą internetową muszą być zgodne z najlepszymi praktykami . Zachowanie najlepszych praktyk jest egzekwowane przez App Transport Security w celu:
- zapobiegać przypadkowemu ujawnieniu, oraz
- zapewnić bezpieczne zachowanie domyślne.
Jak wyjaśniono w notatce technicznej App Transport Security , podczas komunikacji z usługą internetową App Transport Security ma teraz następujące wymagania i zachowanie:
- 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ść przekazywania (patrz lista szyfrów poniżej).
- Certyfikaty muszą być podpisane przy użyciu algorytmu skrótu podpisu SHA256 lub lepszego, za pomocą klucza RSA o długości 2048 bitów lub większej albo klucza o krzywej eliptycznej (ECC) o długości 256 bitów lub większej.
- Nieprawidłowe certyfikaty powodują ciężką awarię i brak połączenia.
Innymi słowy, twoje żądanie usługi internetowej powinno: a.) Używać HTTPS i b.) Być szyfrowane przy użyciu TLS v1.2 z zachowaniem tajemnicy przekazywania.
Jednak, jak wspomniano w innych postach, możesz zastąpić to nowe zachowanie z App Transport Security, określając niepewną domenę w Info.plist
swojej aplikacji.
Aby zastąpić, musisz dodać NSAppTransportSecurity
> NSExceptionDomains
właściwości słownika do swojego Info.plist
. Następnie dodasz domenę usługi internetowej do NSExceptionDomains
słownika.
Na przykład, jeśli chcę ominąć zachowanie App Transport Security dla usługi internetowej na hoście www.twojawebservicehost.com, to zrobiłbym następujące:
Otwórz aplikację w Xcode.
Znajdź Info.plist
plik w Nawigatorze projektu i kliknij go prawym przyciskiem myszy i wybierz opcję menu Otwórz jako > Kod źródłowy . Plik listy właściwości pojawi się w prawym okienku.
Umieść następujący blok właściwości w głównym słowniku 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 musisz podać wyjątki dla dodatkowych domen, możesz dodać inną właściwość słownika poniżej NSExceptionDomains
.
Aby dowiedzieć się więcej na temat wyżej wymienionych kluczy, przeczytaj wspomnianą już notę techniczną .