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

Zabezpečení přenosu aplikací (ATS) vynucuje zabezpečená připojení mezi internetovými prostředky (například back-end serverem aplikace) a vaší aplikací.

V tomto článku se seznámíte se změnami zabezpečení, které App Transport Security vynucuje v aplikaci pro iOS 9, a o tom, co to znamená pro vaše projekty Xamarin.iOS,které se budou vztahovat na možnosti konfigurace ATS, a v případě potřeby se budeme muset odhlásit od ATS ATS. Vzhledem k tomu, že atS je ve výchozím nastavení povolené, všechna nezabezpečená připojení k internetu vyvolá výjimku v aplikacích pro iOS 9 (pokud jste to explicitně nepouměli).

Informace o zabezpečení přenosu aplikací

Jak je uvedeno výše, ATS zajišťuje, aby veškerá internetová komunikace v iOSu 9 a OS X El Capitanu odpovídala osvědčeným postupům pro zabezpečené připojení, což 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 výhradně při HTTPS komunikaci s internetovými prostředky. Kromě toho musí být komunikace rozhraní API vysoké úrovně zašifrovaná pomocí protokolu TLS verze 1.2 s dopředným tajemstvím.

Jakékoli připojení vytvořené pomocí NSUrlConnection,CFUrl nebo NSUrlSession bude ve výchozím nastavení používat ATS v aplikacích sestavený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 sestavených pro iOS 9 a OS X 10.11 (El Capitan), budou všechna připojení pomocí NSUrlConnection,CFUrl nebo NSUrlSession podléhat požadavkům na zabezpečení ATS. Pokud připojení tyto požadavky nesplňuje, dojde k selhání s výjimkou.

Požadavky na připojení ATS

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

  • Všechny šifry připojení musí používat dopředné tajemství. Seznam přijatých šifer najdete níže.
  • Protokol TLS (Transport Layer Security) musí být verze 1.2 nebo vyšší.
  • Otisk prstu SHA256 s klíčem RSA 2048 nebo vyšším nebo 256bitovým klíčem ECC (Elliptic-Curve) se musí použít pro všechny certifikáty.

Vzhledem k tomu, že je ATS v iOSu 9 ve výchozím nastavení povolený, jakýkoli pokus o připojení, které nesplňuje tyto požadavky, bude mít za následek vyvolání výjimky.

Šifry kompatibilní s ATS

Následující typ šifry dopředné komunikace 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 třídami internetové komunikace pro iOS najdete v referenčních informacích ke třídám NSURLConnectionspolečnosti Apple, referenčních informacích k CFURL nebo referencích ke třídám NSURLSession.

Podpora ATS v Xamarin.iOS

Vzhledem k tomu, že v iOSu 9 a OS X El Capitan je ATS ve výchozím nastavení povolený, budete muset provést nějakou akci, jinak se u připojení vyvolá výjimka.

U existující aplikace Apple navrhuje, že protokol HTTPS podporujete co nejdříve. Pokud to nemůžete udělat, protože se připojujete k webové službě třetí strany, která nepodporuje, nebo pokud by podpora byla nepraktická, můžete odhlásit HTTPSHTTPS ATS. Další podrobnosti najdete níže v části Odhlášení z ATS.

Pro novou aplikaci Xamarin.iOS byste měli používat výhradně při HTTPS komunikaci s internetovými prostředky. Opět můžou být situace (třeba použití webové služby třetí strany), kdy to není možné a budete se muset odhlásit ze služby ATS.

KROMĚ toho ATS vynucuje šifrování komunikace rozhraní API vysoké úrovně pomocí protokolu TLS verze 1.2 s dopředné utajení. Další podrobnosti najdete výše v částech Požadavky na připojení ATS a Šifry kompatibilní s ATS.

I když možná nejste obeznámeni s protokolem TLS(Transport Layer Security),je následníkem protokolu SSL(Secure Socket Layer)a poskytuje kolekci kryptografických protokolů pro vynucení zabezpečení přes síťová připojení.

Úroveň protokolu TLS řídí webová služba, kterou používáte, a proto je mimo kontrolu aplikace. Jak , tak i by měly automaticky používat nejvyšší úroveň šifrování HttpClientModernHttpClient TLS podporované serverem.

V závislosti na serveru, na který mluvíte (zejména pokud se jedná o službu třetí strany), možná budete muset zakázat dopředné tajemství nebo vybrat nižší úroveň protokolu TLS. Další podrobnosti najdete níže v části Konfigurace možností ATS.

Důležité

App Transport Security se nevztahuje na aplikace Xamarin s využitím spravovaných implementací HTTPClient. Vztahuje se pouze na připojení pomocí implementací HTTPClient CFNetwork nebo NSURLSession HTTPClient.

Nastavení implementace HTTPClient

Pokud chcete nastavit implementaci HTTPClient, kterou používá aplikace pro iOS, poklikejte na Project v Průzkumník řešení a otevřete tak Project Možnosti. Přejděte na Build pro iOS a v rozevíracím seznamu Implementace HttpClient vyberte požadovaný typ klienta:

Nastavení možností sestavení pro iOS

Spravovaná obslužná rutina

Spravovaná obslužná rutina je plně spravovaná obslužná rutina HttpClient dodána s předchozími verzemi Xamarin.iOS a je výchozí obslužnou rutinou.

Profesionály:

  • Je nejsnáročnější s technologie Microsoft .NET a starší verzí Xamarinu.

Nevýhody:

  • Není plně integrovaný s iOSem (např. je omezený na 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ší spustitelné soubory.
  • Přidává podporu novějších standardů, 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 rozhraní NSUrlSession API.

Profesionály:

  • Používá nativní rozhraní API pro lepší výkon a menší spustitelné soubory.
  • Přidává podporu novějších standardů, 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, ať už přímo nebo z webového zobrazení v iOSu 9, se může zobrazit chyba ve tvaru:

Zabezpečení přenosu aplikací zablokuje načítání prostředků http () s jasným http://www.-the-blocked-domain.com textem, protože je nezabezpečené. Dočasné výjimky je možné nakonfigurovat prostřednictvím souboru Info.plist vaší aplikace.

V iOSu 9 vynucuje Zabezpečení přenosu aplikací (ATS) zabezpečená připojení mezi internetovými prostředky (například back-end serverem aplikace) a vaší aplikací. KROMĚ toho ATS vyžaduje šifrování komunikace pomocí protokolu a komunikace rozhraní API vysoké úrovně pomocí protokolu TLS verze 1.2 s dopředné HTTPS utajení.

Vzhledem k tomu, že ATS je ve výchozím nastavení povolené v aplikacích sestavených pro iOS 9 a OS X 10.11 (El Capitan), budou všechna připojení pomocí nebo podléhat požadavkům NSURLConnectionCFURL na zabezpečení NSURLSession ATS. Pokud připojení tyto požadavky nesplňuje, dojde k selhání s výjimkou.

Apple také poskytuje ukázkovou aplikaci TLSTool, kterou je možné zkompilovat (případně překódovat do Xamarinu a C#) a použít ji k diagnostice problémů s ATS/TLS. Informace o tom, jak tento problém vyřešit, najdete v části Odhlášení ze služby ATS.

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. Pro řízení ATS jsou k dispozici následující klíče (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 ( ) – Obsahuje všechny klíče a hodnoty nastavení pro ATS.
  • NSAllowsArbitraryLoads ( ) – Pokud bude ATS zakázaná pro všechny YESYES v NSExceptionDomains . Pro uvedené domény se použije zadané nastavení zabezpečení.
  • NSAllowsArbit bulletinyLoadsInWebContent ( ) – Pokud povolí správné načtení webových stránek, zatímco je pro zbytek aplikace stále povolená ochrana Apple Transport Security YES (ATS).
  • NSExceptionDomains ( ) – Kolekce domén, které a nastavení zabezpečení, které má ATS používat pro danou doménu.
  • domain-name-for-exception-as-string > ( ) – kolekce výjimek pro Dictionary danou doménu (např. www.xamarin.com).
  • NSExceptionMinimumTLSVersion ( ) – Minimální verze protokolu TLS jako TLSv1.0 , nebo TLSv1.1TLSv1.2 (výchozí nastavení).
  • NSExceptionRequiresForwardSecrecy ( ) – Pokud doména nemusí používat šifru s NO dopřednou bezpečností. Výchozí hodnota je YES.
  • NSExceptionAllowsInsecureHTTPLoads ( ) – Pokud (výchozí nastavení) musí být veškerá komunikace s touto doménou NO v HTTPS protokolu.
  • NSRequiresCertificateTransparency ( ) – Pokud zabezpečení domény SSL (Secure Sockets Layer) (SSL) musí obsahovat platná YES data transparentnosti. Výchozí hodnota je NO.
  • NSIncludesSubdomains ( ) – Pokud tato nastavení YES přepíší všechny subdomény této domény. Výchozí hodnota je NO.
  • NSThirdPartyExceptionMinimumTLSVersion ( ) – Verze protokolu TLS, která se používá, když je doména službou třetí strany mimo kontrolu vývojáře.
  • NSThirdPartyExceptionRequiresForwardSecrecy ( ) – Pokud YES doména třetí strany vyžaduje přeposílání.
  • NSThirdPartyExceptionAllowsInsecureHTTPLoads ( ) – Pokud YES bude ATS umožňovat nezabezpečenou komunikaci s doménami třetích stran.

Opting-Out ATS

I když Apple důrazně naznačuje použití HTTPS protokolu a zabezpečenou komunikaci s informacemi na základě Internetu, může to být tím, že tato situace není vždycky možná. Například pokud komunikujete s webovou službou třetí strany nebo pomocí internetových reklam dodaných v aplikaci.

Pokud vaše aplikace Xamarin. iOS musí vytvořit požadavek na nezabezpečenou doménu, následující změny v souboru info. plist vaší aplikace zakazují výchozí hodnoty zabezpečení, které ATS pro danou doménu vynutilo:

<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 dvakrát klikněte na Info.plist soubor v Info.plist, přepněte do zobrazení zdroje a přidejte výše uvedené klíče:

Zobrazení zdroje souboru info. plist po přidání zadaných klíčů

Pokud vaše aplikace potřebuje načíst a zobrazit webový obsah z nezabezpečených webů, přidejte následující do souboru info. plist vaší aplikace, aby se webové stránky daly načíst správně, zatímco ochrana pomocí protokolu ATS (Apple Transport Security) je pro zbytek aplikace pořád povolená:

<key>NSAppTransportSecurity</key>
<dict>
    <key> NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

V případě potřeby můžete v souboru info. plist vaší aplikace provést následující změny, abyste mohli zcela zakázat ATS pro všechny domény a internetovou komunikaci:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

uvnitř Visual Studio pro Mac dvakrát klikněte na Info.plist soubor v Info.plist, přepněte do zobrazení zdroje a přidejte výše uvedené klíče:

Zobrazení zdroje souboru info. plist po zadání NSAllowsArbitraryLoadsInWebContent a NSAllowsArbitraryLoads.

Důležité

Pokud vaše aplikace vyžaduje připojení k nezabezpečenému webu, měli byste místo toho, aby provedete úplné používání služby ATS, měli jako výjimku zadat doménu jako výjimku NSAllowsArbitraryLoads . NSAllowsArbitraryLoads by mělo být použito pouze v extrémních situacích.

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

Souhrn

V tomto článku zavedli ATS (App Transport Security) a byl popsán způsob, jak vynutil zabezpečenou komunikaci s internetem. Za prvé jsme pokryli změny, které vyžaduje pro aplikaci Xamarin. iOS běžící v iOS 9. Pak jsme pokryli řízení funkcí a možností ATS. Nakonec jsme si pokryli, že ve vaší aplikaci Xamarin. iOS jste si zvolili ze služby ATS.