ATS & https krav på iOS

 
 ATS og https krav til ios 2017.
 
 

 

Hvis du har arbejdet med iOS apps indenfor det seneste år, mere præcist siden udgivelsen af iOS 9, har du måske bidt mærke i, at Apple har introduceret App Transport Security (også kendt som ATS).

ATS går kort fortalt ud på, at al web-kommunikation i apps, som understøtter iOS 9 og nyere, som udgangspunkt skal foregå via https fremfor http. ATS håndhæves af NSURLSession-klassen og alle API’er som benytter denne, og er automatisk aktiveret fra iOS 9 og nyere. Den ældre NSURLConnection-klasse håndhæver også ATS, hvis du bygger til iOS 9 og nyere.

 

Forudsætninger for understøttelse af https

  1. Din app skal implementeres, så den kommunikerer via https fremfor http.
  2. Din content provider, der anvendes i din app, skal supportere og udstille data via https.

Udfordringen ved ATS opstår, hvis din content provider ikke understøtter https. Det bør de selvfølgelig gøre, og hvis de ikke gør, bør du starte med at bede dem om at understøtte https. Så er problemet løst, og du skal blot implementere punkt 1 herover!

Vi ved dog alle, at verden sjældent er så simpelt, og der ingen garanti er for, at vi kan få https understøttelse fra i morgen. Derfor har Apple været så flinke at tilbyde flere undtagelser for ATS, som man kan sætte i Info.plist filen:

ATS---https-krav-paa-iOS---Touchlogic_kode.jpg

 

Her kan du blandt andet angive NSExceptionDomains, hvor du kan tillade http for et eller flere domæner. Hvis domænet allerede understøtter https, men med en ældre standard kan du også opsætte undtagelser for dette med en af flere nøgler. Du har også mulighed for at slå ATS helt fra ved at sætte NSAllowsArbitraryLoads nøglen til YES.

Hidtil har man frit kunnet tilføje undtagelser, og som sagt også kunnet slå ATS helt fra, hvis man ikke kunne overtale sin content provider til at sætte en smækker SSL binding op, men fra årsskiftet skal der nye boller på suppen.

 

Ingen undskyldning længere - Undtagen, når den er virkelig god

Apple har på WWDC 2016 under en forelæsning annonceret, at ATS vil være et krav fra slutningen af 2016.

Den udmelding har givet en del usikkerhed. Hvad betyder det for ens eksisterende apps, og hvad gør man, når man ikke kan få den https forbindelse til en tredjeparts provider, man har ønsket sig i over et år? Rent teknisk fortsætter ATS som det har fungeret siden iOS 9 med nogle få nye undtagelsesmuligheder.

Det nye ligger i app store reviewet. For flere af de mulige undtagelser, som f.eks. at deaktivere ATS helt eller blot for et domæne, kræves det fra årsskiftet, at man har argumenterne klar. Men der er stadig en risiko for, at ens argumenter ikke er gode nok, og ens nye app update bliver afvist af Apple.

 

Hvad skal du gøre nu

  1. Du bør til en start undersøge om din content provider og tredjeparts komponenter allerede i dag understøtter https med TLS 1.2. Hvis ja, skal du blot tilpasse din app til at kommunikere via https og læne dig tilbage med ro i sjælen.
  2. Hvis du har content providers som ikke understøtter ATS, bør du undersøge om de kan opgradere deres forbindelser inden for en overskuelig fremtid.
  3. Hvis https ikke er eller bliver en mulighed, skal du for apps som allerede er released til iOS 9 overveje, om din argumentation for at komme igennem det næste app review er god nok
  4. Hvis din app endnu ikke er released til iOS 9 eller senere, og du er i gang med at forberede dette, skal du sætte din Info.plist op med de relevante undtagelser. Og hvis du benytter en af nedenstående nøgler, skal du overveje om din argumentation er god nok til at komme igennem et app review:
  • NSAllowsArbitraryLoads
  • NSExceptionAllowsInsecureHTTPLoads
  • NSExceptionMinimumTLSVersion

Apples developer site kan du læse om nogle af de scenarier, hvor Apple vil overveje at lade din app slippe gennem nåleøjet uden https, og du kan også se, hvilke scenarier der ikke kræver argumentation i review processen. 

 

Konklusion

Det efterlader os med følgende konklusion

  1. Alle iOS apps skal med nogle specifikke undtagelser benytte https fra årsskiftet.
  2. Du kan muligvis omgå kravet om https, hvis du kan argumentere for, at https ikke er muligt for din app.
  3. Du kan ignorere kravet om https, hvis du har en app, som er bygget specifikt til iOS 8 eller derunder.
  4. Det forventes, at apps som er released inden udgangen af året, fortsat vil kunne benytte http. Opdateringer i 2017 og frem vil dog kræve https.

 

Af Brian Hansen
iOS Udvikler hos Touchlogic