Zabezpečení přenosu aplikací v Xamarin.iOS

Služba App Transport Security (ATS) vynucuje zabezpečená připojení mezi internetovými prostředky (například back-endovým serverem aplikace) a vaší aplikací.

Tento článek představí změny 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 bude se zabývat tím, jak se v případě potřeby odhlásit ze služby ATS ATS . 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í, čímž brání náhodnému zveřejně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é. U nových aplikací 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í NSUrl Připojení ion, CFUrl nebo NSUrlSession budou 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 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í využívající NSUrl Připojení ion, CFUrl nebo NSUrlSession budou podléhat požadavkům na zabezpečení ATS. Pokud vaše připojení nesplňují tento požadavek, dojde k selhání s výjimkou.

Požadavky na Připojení ATS

ATS bude vynucovat následující požadavky pro všechna připojení k internetu:

  • 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šší.
  • Pro všechny certifikáty musí být použita alespoň otisk prstu SHA256 s klíčem RSA o 2048bitovém nebo vyšším nebo 256bitovém nebo vyšším klíči Elliptic-Curve (ECC).

Vzhledem k tomu, že je ATS ve výchozím nastavení v iOSu 9 povolená, všechny pokusy o vytvoření připojení, které nesplňuje tyto požadavky, způsobí vyvolání výjimky.

Šifry kompatibilní se službou ATS

Pro zabezpečenou internetovou komunikaci atS přijímá následující typ šifrování šifry předávání:

  • 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 najdete v referenční dokumentaci ke třídě NSURL Připojení ion společnosti Apple nebo referenční dokumentace ke třídě NSURLSession.

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 se vaše aplikace Xamarin.iOS nebo jakákoli knihovna nebo služba, kterou používá, vytvoří připojení k internetu, budete muset provést nějakou akci nebo vaše připojení způsobí vyvolání výjimky.

Pro existující aplikaci Apple navrhuje, abyste protokol co nejdříve podporovali HTTPS . 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 se z 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 docházet 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 částech s požadavky na Připojení ion ATS a šifry kompatibilní se službou ATS.

I když možná neznáte protokol TLS (Transport Layer Security), je to následník 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 používáte, a proto je mimo kontrolu aplikace. HttpClientModernHttpClient Šifrování TLS podporované serverem by mělo automaticky používat nejvyšší úroveň šifrování TLS.

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ávání tajemství nebo vybrat nižší úroveň protokolu TLS. Další podrobnosti najdete v části Konfigurace možností ATS níže.

Důležité

Zabezpečení přenosu aplikací se nevztahuje na aplikace Xamarin využívající spravované implementace HTTPClient. Platí pouze pro připojení využívající implementace CFNetwork HTTPClient nebo implementace NSURLSession HTTPClient.

Nastavení implementace HTTPClient

Pokud chcete nastavit implementaci HTTPClient používanou aplikací pro iOS, poklikejte na Projekt v Průzkumník řešení a otevřete možnosti projektu. V rozevíracím seznamu implementace HttpClient přejděte na build iOS a vyberte požadovaný typ klienta:

Setting the iOS Build Options

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 rozhraním 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.

CfNetwork – obslužná rutina

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 pro 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ů se službou 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.comcleartext), protože je nezabezpečené. Dočasné výjimky je možné nakonfigurovat prostřednictvím souboru Info.plist vaší aplikace.

V systému iOS9 vynucuje služba 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ě k šifrování pomocí protokolu TLS verze 1.2 s předáváním tajemství.

Vzhledem k tomu, že služba 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í NSURLConnectionnebo CFURLNSURLSession budou podléhat požadavkům na zabezpečení ATS. Pokud vaše připojení nesplňují tento požadavek, dojde k selhání 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 bylo možné zobrazit, 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) – Pokud YES bude ATS zakázána pro žádnou doménu , která není uvedená v NSExceptionDomainsseznamu . Pro uvedené domény se použijí zadaná nastavení zabezpečení.
  • NSAllowsArbitraryLoadsInWebContent (Boolean) – Pokud YES 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 používá pro danou doménu.
  • <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 nebo TLSv1.0TLSv1.1TLSv1.2 (což je výchozí hodnota).
  • NSExceptionRequiresForwardSecrecy (Boolean) – Pokud NO doména nemusí používat šifru s předáváním zabezpečení. Výchozí hodnota je YES.
  • NSExceptionAllowsInsecureHTTPLoads (Boolean) – Pokud NO (výchozí) veškerá komunikace s touto doménou musí být v HTTPS protokolu.
  • NSRequiresCertificateTransparency () – Pokud YES protokol SSL (BooleanSecure Sockets Layer) domény musí obsahovat platná data transparentnosti. Výchozí hodnota je NO.
  • NSIncludesSubdomains (Boolean) – Pokud YES tato nastavení přepíší všechny subdomény této domény. Výchozí hodnota je NO.
  • NSThirdPartyExceptionMinimumTLSVersion (String) – verze PROTOKOLU TLS použitá v případech, kdy je doména služba třetí strany mimo kontrolu vývojáře.
  • NSThirdPartyExceptionRequiresForwardSecrecy (Boolean) – Pokud YES doména třetí strany vyžaduje předání tajemství.
  • NSThirdPartyExceptionAllowsInsecureHTTPLoads (Boolean) – Pokud YES ATS povolí nezabezpečenou komunikaci s doménami třetích stran.

Odhlášení z ATS

I když Společnost Apple důrazně navrhuje používat HTTPS protokol a zabezpečenou komunikaci s internetovými informacemi, někdy to nemusí být vždy možné. Pokud například komunikujete s webovou službou třetí strany nebo používáte reklamy doručené přes internet ve vaší aplikaci.

Pokud vaše aplikace Xamarin.iOS musí provést požadavek na nezabezpečenou doménu, následující změny souboru Info.plist vaší aplikace zakáže výchozí nastavení zabezpečení, které ATS vynucuje pro danou doménu:

<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:

The Source view of the Info.plist file after adding specified keys.

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 ochrana Apple Transport Security (ATS) je stále povolená pro zbytek aplikace:

<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:

The Source view of the Info.plist file after specifying NSAllowsArbitraryLoadsInWebContent and NSAllowsArbitraryLoads.

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, NSExceptionDomains a ne úplně vypnout ATS pomocí NSAllowsArbitraryLoads. NSAllowsArbitraryLoads by měla být použita pouze v extrémních nouzových situacích.

Opět platí, že zakázání ATS by se mělo používat jenom jako poslední možnost, pokud je přepnutí na zabezpečená připojení nedostupná nebo nepraktická.

Shrnutí

Tento článek představil službu 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 probrali řízení funkcí a možností ATS. Nakonec jsme probrali výslovný nesouhlas s ATS ve vaší aplikaci Xamarin.iOS.