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:
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 NSURLConnection
CFURL
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çindeNSExceptionDomains
listelenmeyen 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 verecekseYES
. - 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ü olarakTLSv1.0
veyaTLSv1.1
TLSv1.2
(varsayılan sürümdür). - NSExceptionRequiresForwardSecrecy (
Boolean
) - Etki alanının ileri güvenlikli bir şifreleme kullanması gerekmediyseNO
. Varsayılan değer şudur:YES
. - NSExceptionAllowsInsecureHTTPLoads (
Boolean
) - EğerNO
(varsayılan) bu etki alanıyla tüm iletişimler protokoldeHTTPS
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ırsaYES
. 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 gerektiriyorsaYES
. - NSThirdPartyExceptionAllowsInsecureHTTPLoads (
Boolean
) - ATS üçüncü taraf etki alanlarıyla güvenli olmayan iletişime izin verecekseYES
.
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:
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:
Önemli
Uygulamanız güvenli olmayan bir web sitesine bağlantı gerektiriyorsa, ats'yi kullanarak NSAllowsArbitraryLoads
tamamen 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.