Xamarin.iOS'ta Uygulama Taşıma Güvenliği

Uygulama Aktarım Güvenliği (ATS), İnternet kaynakları (uygulamanın arka uç sunucusu gibi) ile uygulamanız arasında güvenli bağlantılar zorlar.

Bu makalede, App Transport Security'nin bir iOS 9 uygulamasında zorunlu k olduğu güvenlik değişiklikleri ve bunun Xamarin.iOSprojeleriniz için ne anlama geldiğini tanıtacak, ATS yapılandırma seçeneklerini kapsayacak ve gerekirse ATS ATS'yi geri almayı kapsayacaktır. ATS varsayılan olarak etkinleştirildiğinden, güvenli olmayan tüm internet bağlantıları iOS 9 uygulamaları için (açıkça izin verilmediği sürece) bir özel durum oluşturur.

Uygulama Taşıma Güvenliği hakkında

Yukarıda belirtildiği gibi ATS, iOS 9 ve OS X El Capitan'daki tüm internet iletişimlerinin güvenli bağlantı en iyi yöntemlerine uygun olmasını sağlar ve böylece hassas bilgilerin doğrudan uygulamanız veya tüketilen bir kitaplık aracılığıyla yanlışlıkla açıklanması önlenebilir.

Mevcut uygulamalar için, mümkün olduğunca HTTPS protokolü uygulama. Yeni Xamarin.iOS uygulamaları için yalnızca internet HTTPS kaynaklarıyla iletişim kurarken kullansanız iyi olur. Buna ek olarak, üst düzey API iletişimi tlS sürüm 1.2 kullanılarak ileriye doğru gizlilik ile şifrelenmeli.

NSUrlConnection, CFUrl veya NSUrlSession ile yapılan tüm bağlantılar, iOS 9 ve OS X 10.11 (El Capitan) için yerleşik uygulamalarda varsayılan olarak ATS kullanır.

Varsayılan ATS Davranışı

ATS, iOS 9 ve OS X 10.11 (El Capitan) için yerleşik uygulamalarda varsayılan olarak etkinleştirildiğinden, NSUrlConnection, CFUrl veya NSUrlSession kullanan tüm bağlantılar ATS güvenlik gereksinimlerine tabi olur. Bağlantılarınız bu gereksinimi karşılamıyorsa özel durumla başarısız olur.

ATS Bağlantı Gereksinimleri

ATS, tüm internet bağlantıları için aşağıdaki gereksinimleri zorunlu tutulacak:

  • Tüm bağlantı şifrelemeleri, iletme gizliliği kullanıyor olabilir. Aşağıda kabul edilen şifrelemelerin listesine bakın.
  • Aktarım Katmanı Güvenliği (TLS) protokolü sürüm 1.2 veya daha büyük olması gerekir.
  • Tüm sertifikalar için en az 2048 bit veya daha büyük bir RSA anahtarına veya 256 bit veya daha büyük bir Elliptic-Curve (ECC) anahtarına sahip bir SHA256 parmak izi kullanılmalıdır.

Yine, ATS iOS 9'da varsayılan olarak etkinleştirildiğinden, bu gereksinimleri karşılamayan bir bağlantı girişimi bir özel durum oluşturur.

ATS Uyumlu Şifrelemeler

Aşağıdaki ileriye doğru gizlilik şifreleme türü, ATS güvenli İnternet iletişimleri tarafından kabul edilir:

  • 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

iOS internet iletişim sınıfları ile çalışma hakkında daha fazla bilgi için lütfen Apple'ın NSURLConnection Sınıf Başvurusu,CLFL Başvurusu veya NSURLSession Sınıf Başvurusu'ne bakın.

Xamarin.iOS'ta ATS desteği

ATS, iOS 9 ve OS X El Capitan'da varsayılan olarak etkinleştirildiğinden, Xamarin.iOS uygulamanız veya kullanmakta olduğu herhangi bir kitaplık ya da hizmet İnternet bağlantısı oluşturursa, bazı eylemlerde bulundurabilirsiniz, yoksa bağlantılarınız bir özel durumla sonuçlanacak.

Apple, mevcut bir uygulama için protokolü mümkün olan en HTTPS kısa sürede desteklemeyi önerir. Desteklemez bir üçüncü taraf web hizmetine bağlanıyorsanız veya destek pratik olmayacaksa ATS'den vazgeçmeniz HTTPSHTTPS gerekir. Daha fazla ayrıntı için aşağıdaki ATS'den Çıkma bölümüne bakın.

Yeni bir Xamarin.iOS uygulaması için yalnızca İnternet HTTPS kaynaklarıyla iletişim kurarken kullansanız iyi olur. Bunun mümkün olmayan ve ATS'den vazgeçmeniz gereken durumlar da (üçüncü taraf bir web hizmeti kullanmak gibi) olabilir.

Ayrıca ATS, tlS sürüm 1.2 kullanılarak iletme gizliliği ile şifrelenen üst düzey API iletişimini zorunlu kılıyor. Daha fazla ayrıntı için yukarıdaki ATSBağlantı Gereksinimleri ve ATS Uyumlu Şifrelemeler bölümlerine bakın.

TLS(AktarımKatmanı Güvenliği) hakkında bilgi sahibi değil de,SSL'nin(Güvenli Yuva Katmanı) ardılıdır ve ağ bağlantıları üzerinden güvenliği zorlamak için bir şifreleme protokolleri koleksiyonu sağlar.

TLS düzeyi, tüketen web hizmeti tarafından denetlenmektedir ve bu nedenle uygulamanın denetimi dışındadır. hem hem HttpClient de otomatik olarak sunucu tarafından desteklenen en yüksek DÜZEYDE ModernHttpClient TLS şifrelemesi kullanacaktır.

Konuştuğunuz sunucuya bağlı olarak (özellikle de üçüncü taraf bir hizmetse), iletme gizliliği devre dışı bırakmanız veya daha düşük bir TLS düzeyi seçmeniz gerekir. Diğer ayrıntılar için aşağıdaki ATS Seçeneklerini Yapılandırma bölümüne bakın.

Önemli

Uygulama Aktarım Güvenliği, Yönetilen HTTPClient uygulamalarını kullanan Xamarin uygulamaları için geçerli değildir. Yalnızca CFNetwork HTTPClient uygulamaları veya NSURLSession HTTPClient uygulamaları kullanan bağlantılar için geçerlidir.

HTTPClient Uygulamasını Ayarlama

Bir iOS uygulaması tarafından kullanılan HTTPClient Uygulamasını ayarlamak için, Project'de Çözüm Gezgini'e çift Project açın. iOS Derlemesi'ne gidin ve HttpClient uygulama açılan listesinden istenen istemci türünü seçin:

iOS Derleme Seçeneklerini Ayarlama

Yönetilen İşleyici

Yönetilen işleyici, Xamarin.iOS'un önceki sürümleriyle birlikte gönderilen tam olarak yönetilen HttpClient işleyicisidir ve varsayılan işleyicidir.

Profesyonel:

  • Xamarin'in Microsoft .NET sürümüyle en uyumlu sürümdür.

Eksi -lerini:

  • iOS ile tam olarak tümleşik değildir (örneğin TLS 1.0 ile sınırlıdır).
  • Genellikle yerel API'lerden çok daha yavaştır.
  • Daha fazla yönetilen kod gerektirir ve daha büyük uygulamalar oluşturur.

CFNetwork İşleyicisi

CFNetwork tabanlı işleyici, yerel çerçeveyi temel alan bir CFNetwork işleyicidir.

Profesyonel:

  • Daha iyi performans ve daha küçük yürütülebilir boyutlar için yerel API kullanır.
  • TLS 1.2 gibi daha yeni standartlar için destek ekler.

Eksi -lerini:

  • iOS 6 veya sonraki bir zaman gerektirir.
  • watchOS'da kullanılamaz.
  • Bazı HttpClient özellikleri ve seçenekleri kullanılamaz.

NSUrlSession İşleyicisi

NSUrlSession tabanlı işleyici, yerel NSUrlSession API'yi temel almaktadır.

Profesyonel:

  • Daha iyi performans ve daha küçük yürütülebilir boyutlar için yerel API kullanır.
  • TLS 1.2 gibi daha yeni standartlar için destek ekler.

Eksi -lerini:

  • iOS 7 veya sonraki bir iOS gerektirir.
  • Bazı HttpClient özellikleri ve seçenekleri kullanılamaz.

ATS Sorunlarını Tanılama

Doğrudan veya iOS 9'daki bir web görünümünden İnternet'e bağlanmaya çalışırken şu formda bir hata alabilirsiniz:

App Transport Security güvenli olmayan bir düz metin HTTP ( http://www.-the-blocked-domain.com ) kaynak yükünü engelledi. Geçici özel durumlar, uygulamanın Info.plist dosyası aracılığıyla yalıtabilirsiniz.

iOS9'da Uygulama Aktarım Güvenliği (ATS), İnternet kaynakları (uygulamanın arka uç sunucusu gibi) ile uygulamanız arasında güvenli bağlantılar zorlar. Ayrıca ATS, protokol ve üst düzey API iletişimini kullanarak iletişimin HTTPS TLS sürüm 1.2 kullanılarak ileriye doğru gizlilikle şifrelenmesini gerektirir.

ATS, iOS 9 ve OS X 10.11 (El Capitan) için yerleşik uygulamalarda varsayılan olarak etkinleştirildiğinden, kullanan tüm bağlantılar veya ATS güvenlik NSURLConnectionCFURLNSURLSession gereksinimlerine tabi olur. Bağlantılarınız bu gereksinimi karşılamıyorsa özel durumla başarısız olur.

Apple ayrıca derlenmiş (veya isteğe bağlı olarak Xamarin ve C# koduna transcoded) ve ATS/TLS sorunlarını tanılamak için kullanılan TLSTool Örnek Uygulamasını sağlar. Bu sorunun nasıl çözüleceğini görmek için lütfen aşağıdaki ATS'den Çıkma bölümüne bakın.

ATS Seçeneklerini Yapılandırma

Uygulamanın Info.plist dosyasındaki belirli anahtarların değerlerini ayarerek ATS'nin çeşitli özelliklerini yapılandırabilirsiniz. ATS denetimi için aşağıdaki anahtarlar kullanılabilir (iç içe nasıl olduklarını göstermek için girintili):

NSAppTransportSecurity
    NSAllowsArbitraryLoads
    NSAllowsArbitraryLoadsInWebContent
    NSExceptionDomains
    <domain-name-for-exception-as-string>
        NSExceptionMinimumTLSVersion
        NSExceptionRequiresForwardSecrecy
        NSExceptionAllowsInsecureHTTPLoads
        NSRequiresCertificateTransparency
        NSIncludesSubdomains
        NSThirdPartyExceptionMinimumTLSVersion
        NSThirdPartyExceptionRequiresForwardSecrecy
        NSThirdPartyExceptionAllowsInsecureHTTPLoads

Her anahtarın türü ve anlamı şu şekildedir:

  • NSAppTransportSecurity ( ) - ATS için tüm ayar anahtarlarını ve değerlerini içerir.
  • NSAllowsArbitraryLoads ( ) - ATS içinde listelenmiyor herhangi bir etki alanı için devre YESYES bırakılacaksa. NSExceptionDomains Listelenen etki alanları için belirtilen güvenlik ayarları kullanılır.
  • NSAllowsArbitraryLoadsInWebContent ( ) - Apple Transport Security (ATS) koruması uygulamanın geri kalanı için hala etkinken web sayfalarının doğru şekilde yüklenmesine izin YES verecekse.
  • NSExceptionDomains ( ) - ATS'nin bir etki alanı için kullanması gereken etki alanları ve güvenlik ayarları koleksiyonu.
  • etki alanı-adı-for-exception-as-string > ( ) - Bir etki alanı için özel Dictionary durum koleksiyonu (örn. www.xamarin.com).
  • NSExceptionMinimumTLSVersion ( ) - veya (varsayılan) olarak en düşük TLS TLSv1.0TLSv1.1TLSv1.2 sürümü.
  • NSExceptionRequiresForwardSecrecy ( ) - Etki alanının ileri NO güvenlikli bir şifreleme kullanmak zorunda yoksa. YES varsayılan değerdir.
  • NSExceptionAllowsInsecureHTTPLoads ( ) - Bu etki alanıyla tüm iletişimlerin NO protokolde olması gerekirse ( HTTPS varsayılan).
  • NSRequiresCertificateTransparency ( ) - Etki alanının Güvenli Yuva Katmanı YES (SSL) geçerli saydamlık verileri içermesi gerekir. NO varsayılan değerdir.
  • NSIncludesSubdomains ( ) - Bu ayarlar bu etki alanının tüm alt YES etki alanlarını geçersiz kılarsa. NO varsayılan değerdir.
  • NSThirdPartyExceptionMinimumTLSVersion ( ) - Etki alanı geliştiricinin denetimi dışında üçüncü taraf bir hizmet olduğunda kullanılan TLS sürümü.
  • NSon Dpartyexceptionrequiresforwardgizliliği ( )- YES bir 3. taraf etki alanı ileri gizliliği gerektiriyorsa.
  • NSon Dpartyexceptionallowsinsecurehttpyüklerini ( )- YES ATS üçüncü taraf etki alanlarıyla güvenli olmayan iletişime izin vermeyecektir.

ATS Opting-Out

Apple, HTTPS protokolü kullanmayı ve internet tabanlı bilgilerle güvenli iletişim güvenliğini önerdiğinde, bu her zaman mümkün olmayabilir. Örneğin, üçüncü taraf bir Web hizmeti ile iletişim kurmaktan veya uygulamanızda internet 'e teslim edilen reklamları kullanmaya çalışıyorsanız.

Xamarin. iOS uygulamanızın güvenli olmayan bir etki alanına istek yapması gerekiyorsa, uygulamanızın Info. plist dosyasında yapılan aşağıdaki DEĞIŞIKLIKLER, ATS 'in belirli bir etki alanı için uyguladığı güvenlik varsayılanlarını devre dışı bırakır:

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

Mac için Visual Studio içinde, Çözüm Gezgini dosyasına çift tıklayın Info.plist , kaynak görünümüne Info.plistgeçin ve yukarıdaki anahtarları ekleyin:

Belirtilen anahtarlar eklendikten sonra Info. plist dosyasının kaynak görünümü.

Uygulamanızın güvenli olmayan sitelerden Web içeriği yüklemesi ve görüntülemesi gerekiyorsa, Apple Transport Security (ATS) koruması hala uygulamanın geri kalanı için etkinken Web sayfalarının doğru yüklenmesine izin vermek için uygulamanızın Info. plist dosyasına aşağıdakileri ekleyin:

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

İsteğe bağlı olarak, tüm etki alanları ve internet iletişimleri için ATS tamamen devre dışı bırakmak üzere uygulamanızın Info. plist dosyasında aşağıdaki değişiklikleri yapabilirsiniz:

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

Mac için Visual Studio içinde, Çözüm Gezgini dosyasına çift tıklayın Info.plist , kaynak görünümüne Info.plistgeçin ve yukarıdaki anahtarları ekleyin:

Nsallowsarbitraryıloadsinwebcontent ve Nsallowsarbitraryıload belirttikten sonra Info. plist dosyasının kaynak görünümü.

Önemli

Uygulamanız güvenli olmayan bir Web sitesine bağlantı gerektiriyorsa, ATS 'yi tamamen kullanarak kapatmak yerine, her zaman etki alanını bir özel durum olarak girmeniz gerekir NSAllowsArbitraryLoads . NSAllowsArbitraryLoads yalnızca Extreme acil durumlarda kullanılmalıdır.

Yeniden devre dışı bırakmak, ATS 'in yalnızca son çare olarak kullanılması gerekir, güvenli bağlantılara geçiş kullanılamaz veya pratik değildir.

Özet

Bu makalede, uygulama taşıma güvenliği (ATS) tanıtılmıştır ve internet ile güvenli iletişimleri zorunlu hale getirme yöntemi açıklanır. İlk olarak, ATS 'ın iOS 9 üzerinde çalışan bir Xamarin. iOS uygulaması için gerektirdiği değişiklikleri ele aldık. Daha sonra ATS özelliklerini ve seçeneklerini denetlemeyi ele aldık. Son olarak, Xamarin. iOS uygulamanızda ATS 'i kullanıma sunduk.