Zabezpečení přenosu aplikací v Xamarin.iOS
App Transport Security (ATS) vynucuje zabezpečená připojení mezi internetovými prostředky (například back-endovým serverem aplikace) a vaší aplikací.
V tomto článku se seznámíte se změnami zabezpečení, které Služba App Transport Security vynucuje u aplikace pro iOS 9 a co to znamená pro vaše projekty Xamarin.iOS, bude se zabývat možnostmi konfigurace ATS a v případě potřeby se bude zabývat tím, jak se ats ATS odhlásit . Vzhledem k tomu, že je atS ve výchozím nastavení povolená, všechna nezabezpečená připojení k internetu v aplikacích pro iOS 9 vyvolá výjimku (pokud jste ji explicitně nepovolili).
Informace o službě App Transport Security
Jak je uvedeno výše, ATS zajišťuje, aby veškerá internetová komunikace v iOSu 9 a OS X El Capitan odpovídala osvědčeným postupům zabezpečeného připojení, a tím brání náhodnému zpřístupnění citlivých informací přímo prostřednictvím vaší aplikace nebo knihovny, kterou využívá.
Pro existující aplikace implementujte HTTPS
protokol, kdykoli je to možné. Pro nové aplikace Xamarin.iOS byste měli používat HTTPS
výhradně při komunikaci s internetovými prostředky. Kromě toho musí být komunikace rozhraní API vysoké úrovně šifrovaná pomocí protokolu TLS verze 1.2 s předáváním tajemství.
Jakékoli připojení vytvořené pomocí NSUrlConnection, CFUrl nebo NSUrlSession bude ve výchozím nastavení používat ATS v aplikacích vytvořených pro iOS 9 a OS X 10.11 (El Capitan).
Výchozí chování ATS
Vzhledem k tomu, že je ATS ve výchozím nastavení povolená v aplikacích vytvořených pro iOS 9 a OS X 10.11 (El Capitan), budou všechna připojení využívající NSUrlConnection, CFUrl nebo NSUrlSession podléhat požadavkům na zabezpečení ATS. Pokud vaše připojení nesplňují tento požadavek, nezdaří se s výjimkou.
Požadavky na připojení ATS
ATS vynucuje pro všechna připojení k internetu následující požadavky:
- Všechny šifry připojení musí používat předávací tajemství. Podívejte se na seznam přijatých šifer níže.
- Protokol TLS (Transport Layer Security) musí být verze 1.2 nebo vyšší.
- Alespoň otisk prstu SHA256 s 2048 bitem nebo větším klíčem RSA nebo 256 bitem nebo větším klíčem Elliptic-Curve (ECC) musí být použit pro všechny certifikáty.
Znovu, protože ats je ve výchozím nastavení povolen v iOSu 9, jakýkoli pokus o připojení, které nesplňuje tyto požadavky, způsobí vyvolání výjimky.
Šifry kompatibilní s ATS
Následující typ šifry předávání přijímá zabezpečená internetová komunikace ATS:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Další informace o práci s internetovými komunikačními třídami pro iOS naleznete v referenčních informacích ke třídě NSURLConnection společnosti Apple, referenční dokumentace CFURL nebo NSURLSession – reference ke třídě.
Podpora ATS v Xamarin.iOS
Vzhledem k tomu, že atS je ve výchozím nastavení povolená v iOSu 9 a OS X El Capitan, pokud vaše aplikace Xamarin.iOS nebo jakákoli knihovna nebo služba používá připojení k internetu, budete muset provést nějakou akci nebo vaše připojení způsobí vyvolání výjimky.
U existující aplikace Apple navrhuje co nejdříve podporovat HTTPS
protokol. Pokud buď nemůžete, protože se připojujete k webové službě třetí strany, která nepodporuje HTTPS
nebo pokud by podpora HTTPS
byla nepraktická, můžete ats odhlásit. Další podrobnosti najdete v části Odhlášení z ATS níže.
Pro novou aplikaci Xamarin.iOS byste měli používat HTTPS
výhradně při komunikaci s internetovými prostředky. Opět může dojít k situacím (jako je použití webové služby třetí strany), kdy to není možné a budete se muset odhlásit ze služby ATS.
AtS navíc vynucuje šifrování komunikace rozhraní API vysoké úrovně pomocí protokolu TLS verze 1.2 s předáváním tajemství. Další podrobnosti najdete v části Požadavky na připojení ATS a šifry kompatibilní se službou ATS.
I když možná nejste obeznámeni s protokolem TLS (Transport Layer Security), jedná se o následníka SSL (Secure Socket Layer) a poskytuje kolekci kryptografických protokolů pro vynucení zabezpečení síťových připojení.
Úroveň TLS je řízena webovou službou, kterou využíváte, a proto je mimo kontrolu aplikace. HttpClient
ModernHttpClient
Server by měl automaticky používat nejvyšší úroveň šifrování TLS podporovaného serverem.
V závislosti na serveru, se kterým mluvíte (zejména pokud se jedná o službu třetí strany), možná budete muset zakázat předávací tajemství nebo vybrat nižší úroveň protokolu TLS. Další podrobnosti najdete v části Konfigurace možností ATS níže.
Důležité
App Transport Security se nevztahuje na aplikace Xamarin pomocí spravovaných implementací HTTPClient. Vztahuje se pouze na připojení používající implementace CFNetwork HTTPClient nebo implementace NSURLSession HTTPClient .
Nastavení implementace HTTPClient
Pokud chcete nastavit implementaci HTTPClient používanou aplikací pro iOS, poklikejte na Project v Průzkumník řešení a otevřete Project Možnosti. Přejděte na build iOS a v rozevíracím seznamu implementace HttpClient vyberte požadovaný typ klienta:
Spravovaná obslužná rutina
Spravovaná obslužná rutina je plně spravovaná obslužná rutina HttpClient, která byla dodána s předchozími verzemi Xamarin.iOS a je výchozí obslužnou rutinou.
Profesionály:
- Je to nejkomppatibilnější s microsoft .NET a starší verzí Xamarinu.
Nevýhody:
- Není plně integrovaný s iOSem (např. je omezen na PROTOKOL TLS 1.0).
- Obvykle je mnohem pomalejší než nativní rozhraní API.
- Vyžaduje více spravovaného kódu a vytváří větší aplikace.
Obslužná rutina CFNetwork
Obslužná rutina založená na CFNetwork je založená na nativním CFNetwork
rozhraní.
Profesionály:
- Používá nativní rozhraní API pro lepší výkon a menší velikosti spustitelných souborů.
- Přidává podporu pro novější standardy, jako je TLS 1.2.
Nevýhody:
- Vyžaduje iOS 6 nebo novější.
- Není k dispozici watchOS.
- Některé funkce a možnosti HttpClient nejsou k dispozici.
Obslužná rutina NSUrlSession
Obslužná rutina založená na NSUrlSession je založená na nativním NSUrlSession
rozhraní API.
Profesionály:
- Používá nativní rozhraní API pro lepší výkon a menší velikosti spustitelných souborů.
- Přidává podporu pro novější standardy, jako je TLS 1.2.
Nevýhody:
- Vyžaduje iOS 7 nebo novější.
- Některé funkce a možnosti HttpClient nejsou k dispozici.
Diagnostika problémů s ATS
Při pokusu o připojení k internetu( přímo nebo z webového zobrazení v iOSu 9) se může zobrazit chyba ve formuláři:
Služba App Transport Security zablokovala načtení prostředku HTTP (
http://www.-the-blocked-domain.com
cleartext), protože je nezabezpečené. Dočasné výjimky je možné nakonfigurovat prostřednictvím souboru Info.plist vaší aplikace.
V iOS9 vynucuje App Transport Security (ATS) zabezpečená připojení mezi internetovými prostředky (například back-endovým serverem aplikace) a vaší aplikací. AtS navíc vyžaduje komunikaci pomocí HTTPS
protokolu a komunikace rozhraní API vysoké úrovně, která se má šifrovat pomocí protokolu TLS verze 1.2 s předáváním tajemství.
Vzhledem k tomu, že ats je ve výchozím nastavení povolená v aplikacích vytvořených pro iOS 9 a OS X 10.11 (El Capitan), všechna připojení používající NSURLConnection
CFURL
nebo NSURLSession
budou podléhat požadavkům na zabezpečení ATS. Pokud vaše připojení nesplňují tento požadavek, nezdaří se s výjimkou.
Apple také poskytuje ukázkovou aplikaci TLSTool , která se dá zkompilovat (nebo volitelně překódovat do Xamarinu a C#) a použít k diagnostice problémů s ATS/TLS. Informace o řešení tohoto problému najdete v části Odhlášení z ATS níže.
Konfigurace možností ATS
Několik funkcí ATS můžete nakonfigurovat nastavením hodnot pro konkrétní klíče v souboru Info.plist vaší aplikace. K dispozici jsou následující klíče pro řízení ATS (odsazené, aby se ukázalo, jak jsou vnořené):
NSAppTransportSecurity
NSAllowsArbitraryLoads
NSAllowsArbitraryLoadsInWebContent
NSExceptionDomains
<domain-name-for-exception-as-string>
NSExceptionMinimumTLSVersion
NSExceptionRequiresForwardSecrecy
NSExceptionAllowsInsecureHTTPLoads
NSRequiresCertificateTransparency
NSIncludesSubdomains
NSThirdPartyExceptionMinimumTLSVersion
NSThirdPartyExceptionRequiresForwardSecrecy
NSThirdPartyExceptionAllowsInsecureHTTPLoads
Každý klíč má následující typ a význam:
- NSAppTransportSecurity (
Dictionary
) – obsahuje všechny klíče a hodnoty nastavení pro ATS. - NSAllowsArbitraryLoads (
Boolean
) – PokudYES
bude ATS zakázaná pro libovolnou doménu , která není uvedená vNSExceptionDomains
seznamu . Pro uvedené domény se použijí zadaná nastavení zabezpečení. - NSAllowsArbitraryLoadsInWebContent (
Boolean
) – PokudYES
webové stránky umožní správně načíst, zatímco ochrana Apple Transport Security (ATS) je stále povolená pro zbytek aplikace. - NSExceptionDomains (
Dictionary
) – kolekce domén, které a nastavení zabezpečení, které ATS má pro danou doménu používat. - <domain-name-for-exception-as-string> (
Dictionary
) – kolekce výjimek pro danou doménu (např.www.xamarin.com
). - NSExceptionMinimumTLSVersion (
String
) – minimální verze protokolu TLS jako neboTLSv1.0
TLSv1.1
TLSv1.2
(což je výchozí). - NSExceptionRequiresForwardSecrecy (
Boolean
) – PokudNO
doména nemusí používat šifru s předáváním zabezpečení. Výchozí hodnota jeYES
. - NSExceptionAllowsInsecureHTTPLoads (
Boolean
) – PokudNO
(výchozí) veškerá komunikace s touto doménouHTTPS
musí být v protokolu. - NSRequiresCertificateTransparency (
Boolean
) – PokudYES
musí protokol SSL (Secure Sockets Layer) domény obsahovat platná data průhlednosti. Výchozí hodnota jeNO
. - NSIncludesSubdomains (
Boolean
) – PokudYES
tato nastavení přepíšou všechny subdomény této domény. Výchozí hodnota jeNO
. - NSThirdPartyExceptionMinimumTLSVersion (
String
) – verze PROTOKOLU TLS použitá při doméně je služba třetí strany mimo řízení vývojáře. - NSThirdPartyExceptionRequiresForwardSecrecy (
Boolean
) – PokudYES
doména třetí strany vyžaduje předávání tajemství. - NSThirdPartyExceptionAllowsInsecureHTTPLoads (
Boolean
) – PokudYES
ATS povolí nezabezpečenou komunikaci s doménami třetích stran.
Opting-Out ATS
I když Společnost Apple důrazně navrhuje používat HTTPS
protokol a zabezpečenou komunikaci s internetovými informacemi, může se stát, že to není vždy možné. Pokud například komunikujete s webovou službou třetí strany nebo používáte internetové reklamy doručované ve vaší aplikaci.
Pokud vaše aplikace Xamarin.iOS musí provést požadavek na nezabezpečenou doménu, následující změny v souboru Info.plist vaší aplikace zakažou výchozí hodnoty zabezpečení, které ATS pro danou doménu vynucuje:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.the-domain-name.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Uvnitř Visual Studio pro Mac poklikejte na Info.plist
soubor v Průzkumník řešení, přepněte do zobrazení Zdroj a přidejte výše uvedené klíče:
Pokud vaše aplikace potřebuje načíst a zobrazit webový obsah z nezabezpečených webů, přidejte do souboru Info.plist vaší aplikace následující informace, aby se webové stránky správně načetly, zatímco pro zbytek aplikace je stále povolená ochrana Apple Transport Security (ATS):
<key>NSAppTransportSecurity</key>
<dict>
<key> NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
Volitelně můžete v souboru Info.plist vaší aplikace provést následující změny, které úplně zakáže ATS pro všechny domény a internetovou komunikaci:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Uvnitř Visual Studio pro Mac poklikejte na Info.plist
soubor v Průzkumník řešení, přepněte do zobrazení Zdroj a přidejte výše uvedené klíče:
Důležité
Pokud vaše aplikace vyžaduje připojení k nezabezpečenému webu, měli byste vždy zadat doménu jako výjimku místo NSExceptionDomains
úplné vypnutí ATS pomocí NSAllowsArbitraryLoads
. NSAllowsArbitraryLoads
by měly být použity pouze v extrémních nouzových situacích.
Opět platí, že zakázání ATS by mělo být použito pouze jako poslední možnost, pokud je přepnutí na zabezpečená připojení nedostupná nebo nepraktická.
Souhrn
Tento článek představil App Transport Security (ATS) a popsal způsob, jakým vynucuje zabezpečenou komunikaci s internetem. Nejprve jsme probrali změny, které ATS vyžaduje pro aplikaci Xamarin.iOS spuštěnou v iOSu 9. Pak jsme se zabývali řízením funkcí a možností ATS. Nakonec jsme probrali výslovný nesouhlas se službou ATS ve vaší aplikaci Xamarin.iOS.