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

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
YESYESbırakılacaksa.NSExceptionDomainsListelenen 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
YESverecekse. - 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
Dictionarydurum koleksiyonu (örn.www.xamarin.com). - NSExceptionMinimumTLSVersion ( ) - veya (varsayılan) olarak en düşük TLS
TLSv1.0TLSv1.1TLSv1.2sürümü. - NSExceptionRequiresForwardSecrecy ( ) - Etki alanının ileri
NOgüvenlikli bir şifreleme kullanmak zorunda yoksa.YESvarsayılan değerdir. - NSExceptionAllowsInsecureHTTPLoads ( ) - Bu etki alanıyla tüm iletişimlerin
NOprotokolde olması gerekirse (HTTPSvarsayılan). - NSRequiresCertificateTransparency ( ) - Etki alanının Güvenli Yuva Katmanı
YES(SSL) geçerli saydamlık verileri içermesi gerekir.NOvarsayılan değerdir. - NSIncludesSubdomains ( ) - Bu ayarlar bu etki alanının tüm alt
YESetki alanlarını geçersiz kılarsa.NOvarsayı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 ( )-
YESbir 3. taraf etki alanı ileri gizliliği gerektiriyorsa. - NSon Dpartyexceptionallowsinsecurehttpyüklerini ( )-
YESATS üçü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:
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:
Ö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.

