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 makale, App Transport Security'nin bir iOS 9 uygulamasında uyguladığı güvenlik değişikliklerini ve bunun Xamarin.iOS projeleriniz için ne anlama geldiğini tanıtacak, ATS yapılandırma seçeneklerini ve gerekirse ATS ATS'yi geri çevirmeyi ele alacaktır. ATS varsayılan olarak etkinleştirildiğinden, güvenli olmayan İnternet bağlantıları iOS 9 uygulamalarında özel durum oluşturur (açıkça izin vermediğiniz sürece).

Uygulama Aktarım 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ğlayarak hassas bilgilerin doğrudan uygulamanız veya kullanmakta olduğu bir kitaplık aracılığıyla yanlışlıkla açıklanmasını önler.

Mevcut uygulamalar için mümkün olduğunca protokolü uygulayın HTTPS . Yeni Xamarin.iOS uygulamaları için yalnızca İnternet kaynaklarıyla iletişim kurarken kullanmanız HTTPS gerekir. Ayrıca üst düzey API iletişimi, iletme gizliliğine sahip TLS sürüm 1.2 kullanılarak şifrelenmelidir.

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

Varsayılan ATS Davranışı

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

ATS Bağlan ion Gereksinimleri

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

  • Tüm bağlantı şifreleri iletme gizliliği kullanıyor olmalıdır. Aşağıdaki kabul edilen şifreler listesine bakın.
  • Aktarım Katmanı Güvenliği (TLS) protokolü sürüm 1.2 veya üzeri olmalıdır.
  • Tüm sertifikalar için en az 2048 bit veya daha büyük bir RSA anahtarına sahip bir SHA256 parmak izi ya da 256 bit veya daha büyük bir Üç Nokta Eğrisi (ECC) anahtarı kullanılmalıdır.

Yine, iOS 9'da ATS varsayılan olarak etkinleştirildiğinden, bu gereksinimleri karşılamayan bir bağlantı kurmaya yönelik tüm girişimler özel durum oluşturmayla sonuçlanır.

ATS Uyumlu Şifrelemeler

Aşağıdaki iletme gizliliği şifreleme türü ATS güvenli internet 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 NSURL Bağlan ion Sınıf Başvurusu veya NSURLSession Sınıf Başvurusu bölümüne bakın.

Xamarin.iOS'ta ATS'ye Destek

ATS, iOS 9 ve OS X El Capitan'da varsayılan olarak etkinleştirildiğinden, Xamarin.iOS uygulamanız veya kullandığı herhangi bir kitaplık veya hizmet İnternet'e bağlantı kurarsa, bazı işlemler yapmanız gerekir, aksi takdirde bağlantılarınız bir özel durum oluşur.

Mevcut bir uygulama için Apple, protokolü mümkün olan en kısa sürede desteklemenizi HTTPS önerir. Desteklemeyen bir 3. taraf web hizmetine bağlandığınızdan HTTPS ya da destek HTTPS sağlamanın pratik olmamasından dolayı bunu yapamazsanız ATS'yi geri çevirebilirsiniz. Diğer ayrıntılar için aşağıdaki ATS'yi Geri Çevirme bölümüne bakın.

Yeni bir Xamarin.iOS uygulaması için yalnızca İnternet kaynaklarıyla iletişim kurarken kullanmanız HTTPS gerekir. Bunun mümkün olmadığı ve ATS'yi geri çevirmeniz gerekeceği durumlar da (üçüncü taraf web hizmeti kullanmak gibi) olabilir.

Buna ek olarak, ATS ileri gizlilik ile TLS sürüm 1.2 kullanılarak şifrelenecek üst düzey API iletişimlerini zorlar. Daha fazla ayrıntı için yukarıdaki ATS Bağlan ion Gereksinimleri ve ATS Uyumlu Şifrelemeler bölümlerine bakın.

TLS (Aktarım Katmanı Güvenliği) hakkında bilgi sahibi olmayabilirsiniz ancak 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, kullandığınız web hizmeti tarafından denetlenmektedir ve bu nedenle uygulamanın denetiminin dışındadır. HttpClient hem hem de , ModernHttpClient sunucu tarafından desteklenen en yüksek TLS şifreleme düzeyini otomatik olarak kullanmalıdır.

Konuştuğunuz sunucuya bağlı olarak (özellikle üçüncü taraf bir hizmetse), iletme gizliliğini devre dışı bırakmanız veya daha düşük bir TLS düzeyi seçmeniz gerekebilir. Daha fazla ayrıntı 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ı 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, Çözüm Gezgini'nde Projeye çift tıklayarak Proje Seçenekleri'ni açın. iOS Derlemesi'ne gidin ve HttpClient uygulaması açılan listesinden istediğiniz istemci türünü seçin:

Setting the iOS Build Options

Yönetilen İşleyici

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

Profesyonel:

  • Microsoft .NET ve Xamarin'in eski sürümüyle en uyumlu olanıdı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 CFNetwork çerçeveyi temel alı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 6 veya üzerini gerektirir.
  • watchOS'ta kullanılamaz.
  • Bazı HttpClient özellikleri ve seçenekleri kullanılamaz.

NSUrlSession İşleyicisi

NSUrlSession tabanlı işleyici, yerel NSUrlSession API'yi temel alı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 sürümü 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 biçimde bir hata alabilirsiniz:

Uygulama Aktarım Güvenliği güvenli olmadığından net metin HTTP (http://www.-the-blocked-domain.com) kaynak yükünü engelledi. Geçici özel durumlar, uygulamanızın Info.plist dosyası aracılığıyla yapılandırılabilir.

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. Buna ek olarak, ATS protokol kullanılarak iletişimin ve üst düzey API iletişiminin HTTPS tls sürüm 1.2 kullanılarak iletme gizliliği ile şifrelenmesini gerektirir.

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

Apple ayrıca derlenebilen (veya isteğe bağlı olarak Xamarin ve C# ile kodlanabilen) ve ATS/TLS sorunlarını tanılamak için kullanılan TLSTool Örnek Uygulamasını sağlar. Bu sorunun nasıl çözüldüğü hakkında bilgi için lütfen aşağıdaki ATS'yi Geri Çevirme bölümüne bakın.

ATS Seçeneklerini Yapılandırma

Uygulamanızın Info.plist dosyasında belirli anahtarlar için değerler ayarlayarak ATS'nin çeşitli özelliklerini yapılandırabilirsiniz. ATS'yi denetlemek için aşağıdaki anahtarlar kullanılabilir (iç içe nasıl yerleştirdiklerini 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 aşağıdaki türe ve anlamlara sahiptir:

  • NSAppTransportSecurity (Dictionary) - ATS için tüm ayar anahtarlarını ve değerlerini içerir.
  • NSAllowsArbitraryLoads (Boolean) - ATS içinde NSExceptionDomainslistelenmeyen herhangi bir etki alanı için devre dışı bırakılacaksaYES. Listelenen etki alanları için belirtilen güvenlik ayarları kullanılır.
  • NSAllowsArbitraryLoadsInWebContent (Boolean) - Apple Transport Security (ATS) koruması uygulamanın geri kalanında hala etkinken web sayfalarının düzgün yüklenmesine izin verecekse YES .
  • NSExceptionDomains (Dictionary) - ATS'nin belirli bir etki alanı için kullanması gereken etki alanları ve güvenlik ayarları koleksiyonu.
  • <etki alanı-adı-for-exception-as-string> (Dictionary) - Belirli bir etki alanı için özel durum koleksiyonu (örn. www.xamarin.com).
  • NSExceptionMinimumTLSVersion (String) - en düşük TLS sürümü olarak TLSv1.0veya TLSv1.1TLSv1.2 (varsayılan sürümdür).
  • NSExceptionRequiresForwardSecrecy (Boolean) - Etki alanının ileri güvenlikli bir şifreleme kullanması gerekmediyse NO . Varsayılan değer şudur: YES.
  • NSExceptionAllowsInsecureHTTPLoads (Boolean) - Eğer NO (varsayılan) bu etki alanıyla tüm iletişimler protokolde HTTPS olmalıdır.
  • NSRequiresCertificateTransparency (Boolean) - YES Etki alanının Güvenli Yuva Katmanı'nın (SSL) geçerli saydamlık verileri içermesi gerekiyorsa. Varsayılan değer şudur: NO.
  • NSIncludesSubdomains (Boolean) - Bu ayarlar bu etki alanının tüm alt etki alanları geçersiz kılınırsa YES . Varsayılan değer şudur: NO.
  • NSThirdPartyExceptionMinimumTLSVersion (String) - Etki alanı, geliştiricinin denetimi dışında bir üçüncü taraf hizmeti olduğunda kullanılan TLS sürümü.
  • NSThirdPartyExceptionRequiresForwardSecrecy (Boolean) - Üçüncü taraf etki alanı iletme gizliliği gerektiriyorsa YES .
  • NSThirdPartyExceptionAllowsInsecureHTTPLoads (Boolean) - ATS üçüncü taraf etki alanlarıyla güvenli olmayan iletişime izin verecekse YES .

ATS'yi Geri Çevirme

Apple, protokolün HTTPS kullanılmasını ve İnternet tabanlı bilgilerle güvenli iletişimin kullanılmasını önerse de, bunun her zaman mümkün olmadığı zamanlar olabilir. Örneğin, üçüncü taraf bir web hizmetiyle iletişim kuruyorsanız veya uygulamanızda İnternet'te yayınlanan reklamlar kullanıyorsanız.

Xamarin.iOS uygulamanızın güvenli olmayan bir etki alanına istekte bulunması gerekiyorsa, uygulamanızın Info.plist dosyasında yapılan aşağıdaki değişiklikler ATS'nin 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 dosyaya Info.plistçift tıklayın, Kaynak görünümüne geçin ve yukarıdaki anahtarları ekleyin:

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

Uygulamanızın güvenli olmayan sitelerden web içeriği yüklemesi ve görüntülemesi gerekiyorsa, Apple Aktarım Güvenliği (ATS) koruması uygulamanın geri kalanında hala etkinken web sayfalarının düzgün 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 İnternet iletişimi için ATS'yi tamamen devre dışı bırakmak için 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 dosyaya Info.plistçift tıklayın, Kaynak görünümüne geçin ve yukarıdaki anahtarları ekleyin:

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

Önemli

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

Yine, güvenli bağlantılara geçiş kullanılamaz veya pratik değilse, ATS'yi devre dışı bırakmak yalnızca son çare olarak kullanılmalıdır.

Özet

Bu makalede App Transport Security (ATS) tanıtılmış ve İnternet ile güvenli iletişimin nasıl zorunlu kılındığı açıklanmıştır. İlk olarak, iOS 9 üzerinde çalışan bir Xamarin.iOS uygulaması için ATS'nin gerektirdiği değişiklikleri ele aldık. Ardından ATS özelliklerini ve seçeneklerini denetlemeyi ele aldık. Son olarak Xamarin.iOS uygulamanızda ATS'yi geri çevirmeyi ele aldık.