Apple Delays iOS SSL Requirement Indefinitely
developer.apple.com
developer.apple.com
"The overall approach the App Store review team will take when it comes to ATS exemptions was summed up on the Apple developer forums:
“The goal here is to flush out those folks who, when ATS was first released, simply turned it off globally and moved on. That will no longer be allowed.”
Hence, for a given App going through the App Store review process:* An easy policy to justify is to have NSAllowsArbitraryLoads disabled and a list of domain-specific exemptions for third-party domains the App connects to.
* A policy that will be harder to justify is to have NSAllowsArbitraryLoads enabled and a list of domain-specific “un-exemptions” for the domains you control.
* Lastly, a policy that will definitely trigger a rejection, as stated by Apple, is to have NSAllowsArbitraryLoads enabled with no additional ATS settings. "
Since most Apps are not compliant yet, the App Store review team would have had to review every justification for every App and make a decision on whether to allow the App on the Store or not.
I mean, these guys forced every app to be able to handle IPV6-only network operations last year. And this was after making all apps switch to 64 bits a bit earlier. Why did they back up off SSL?
I feel like this is kind of a turning point, where Apple, instead of driving the market with innovative APIs and having a vision, now tries to compromise and removes innovative features to keep its immense app market happy, and oblige for it.
What a let down, especially after a very nice 2016 year, where they stood against the FBI and published their open letter about privacy of their customers.
Go try and buy something on https://apple.com - you will once you go to view your cart you will be redirected to plain vanilla HTTP. There is no way around this. If they can't get their own SSL support in order...
That's easy to answer. The US government has an IPv6 mandate. They have no such SSL mandate.
The mandate comes from mobile carriers, some of whom desperately want to run networks where phones only get v6 addresses, and v4 traffic is tunneled through DNS64/NAT64.
Decentralized platform, needs to be connected to nodes. Each node can't get an SSL cert because we can't force everyone on a blockchain to get a domain name. It doesn't matter that there's SSL anyway because everything's signed by the server anyway. The data the client sends is also public, so the worst that can happen is an attacker blocks a transaction. This can also happen with SSL.
We could just distribute a cert with the node and hardcode it into our app, but then there's no point of SSL, we just published our private key.
Yes, this is kinda edge case.
"Indefinitely" while technically accurate also implies "unlimited period of time." The article says there will be a deadline, it just hasn't been determined as of yet.
A better title may be "Apple Delays iOS TLS App Requirement." Just simply chop off the word "indefinitely." And throw in App to differentiate it from a e.g. Safari TLS requirement. Also TLS instead of SSL.
> "Indefinitely" while technically accurate also implies "unlimited period of time."
It has two meanings. But is more often used to mean unlimited period of time.
kind of like transition period.
As long as there is a way for an App to make non-SSL connection you'll have to run a non-SSL enabled endpoint; which in effect can put users at risk even if they haven't configured their own devices/apps to use it.
I think the proposal was to have a configurable option to enable an extra security lockdown, which would remain disabled by default.
Related reading: http://limi.net/checkboxes-that-kill
to get this app to work, run:
$ sudo setenforce 0
problems solved!From the Info.plist key reference (https://developer.apple.com/library/content/documentation/Ge...):
App Transport Security (ATS) applies only to connections made to public host names. The system does not provide ATS protection to connections made to:
* Internet protocol (IP) addresses
* Unqualified host names
* Local hosts employing the .local top-level domain (TLD)
To connect to an unqualified host name or to a .local domain, you must set the value of the NSAllowsLocalNetworking key to YES.
Apple seems to have wildly varying execution. Some things they do are great. Other times their behavior is shockingly erratic.
For all the downvoters on my parent post: This blog from last year said something else: https://pupeno.com/2015/12/15/legally-submit-app-apples-app-...
Edit: Downvote me all you want, but the OP asked why people just didn't implement HTTPS and I have first hand knowledge of several apps that chose to not implement HTTPS because the legal work required around crypto export licenses was too much to be worth it.
While we could request exceptions for every single one, this would require updating the app every time we enable a new HTTP site through our back-end. I was not looking forward to this, and I wondered how many others were similarly dreading the transition.
On a related note, does anyone know how Firefox, Chrome, or other browsers are handling this? Don't they need to have a universal exception for HTTP, which is not supposed to be allowed under the new rule?
Forgive me if I've misused terminology here—I'm the non-technical founder—so my understanding of why we couldn't use the Safari WebView (which I assume is the same or closely related to what you referenced) is a bit fuzzy. All I know for sure was that our dev team was not looking forward to pleading for ATS exceptions.
It's annoying to have to audit your apps and enumerate the endpoints, but as long as Apple didn't require justification for explicit domain exceptions, everything should've been fine.
The previous plan was they they were going to require justification for every domain exception.
Further, they were going to require justification if you were already using HTTP Live Streaming... Apple's own protocol which is written to use AES encrypted segments over plain HTTP.
They were going to require justification for peer connections that have to jump through hoops to get URLSession recognize their self-signed certificates. This one in particular is still affecting one of my apps. It's not always possible to force peer certificates to be accepted, making HTTPS between peers very difficult (seemingly impossible) at times.
I'm not saying that these things can't be done but I think Apple underestimated the number of systems affected and the justifications and reasons involved. HTTPS is fundamentally not "everywhere", despite its prevalence in larger systems.
If one is doing some multi-cast multi-tenant swarm stuff... why is the data private? It seems like a lot of people have access.
There's nothing magical about certificate authorities. There are many ways to establish secure connections without them.
> By the end of 2016, when your apps communicate with your own server back ends, they must do so using a secure TLS channel using TLS 1.2, unless the data being communicated is bulk data such as media streaming and data that’s already encrypted.
https://nakedsecurity.sophos.com/2016/06/17/apple-ios-to-req...
Would ATS have enforced that there could only be a few centralized cloud servers?
And can I simply bypass ATS by linking in curl+openssl?
Are iOS apps even allowed to open raw TCP sockets?
iOS 10 adds the key NSAllowsLocalNetworking which disables ATS for "connections to unqualified domains and to .local domains". So this can continue to work.
However, treating local networks as secure isn't generally a good design! If the home network has an open Wi-Fi hotspot, or a WPA hotspot with WPS PIN enabled or where the attacker knows or can bruteforce the password (and in many other cases), it is possible to sniff other users' traffic. Instead of using an unencrypted connection, whether HTTP or otherwise, you should design the initial pairing process between the app and the device to set up encryption keys. For HTTPS this can be in the form of having the device generate a self-signed certificate and send it to the app to use as a custom root. You need some sort of pairing or setup process anyway for the device to know how to connect to the user's network, so you might as well do security properly.
> Or to a system that each company who buys it hosts on their own and in the app the customer has to supply that hostname or IP in order to connect?
In that case you should probably just require the companies to have a domain and a certificate for it; build in Let's Encrypt support if you want.
> And can I simply bypass ATS by linking in curl+openssl?
From a technical perspective, yes, though I can't say whether Apple would reject an app because of it.
> Are iOS apps even allowed to open raw TCP sockets?
Yes.
- com.apple.geod.xpc tried to establish a connection to gspe19.ls.apple.com on port 80
- App Store / softwareupdated uses port 80 to download updates from swcdn.apple.com
- helpd uses port 80 to fetch help docs from the web
- IMTransferAgent tried to establish a connection to ussjc.ce.apple-dns.net on port 80. This is used by Messages.app when picture messages are received.
- iTunes uses port 80 all over the place to fetch content from the mzstatic CDN and others
- nsurlsessiond uses port 80 to fetch from apple-dns.net, blobstore.apple.com, icloud-content.com, aaplimg.com
- photolibraryd via com.apple.photomoments.xpc tried to establish a connection to gspe21.ls.apple.com on port 80
- Photos Agent tried to establish a connection to s3-w-a.us-west-2.amazonaws.com on port 80
- storeaccountd tried to establish a connection to sandbox.itunes-apple.com.akadns.net on port 80
- storedownloadd tried to establish a connection to osxapps.itunes.apple.com on port 80
- SpotlightNetHelper tried to establish a connection to wu-calculator.apple.com on port 80
The iOS client does certificate pinning, so it isn't a huge security concern (although revocation would be a nightmare), but it does not surprise me that people are afraid of supporting TLS only for their apps.
They mean at the App Store submission point. In January, they were going to start rejecting apps that didn't provide a justification for completely disabling ATS.
We're still going on with our efforts to make everything go over HTTPS always, but this does take the pressure off a little. We were really fearing not being able to submit updates in early 2017 because of ATS.
I was honestly kinda looking forward to January because it would force them to re-evaluate some of the shittier providers so they could get app updates out.