We have successfully deployed our Qt C++ application on Windows and Android using OpenSSL with TLS Pre-Shared Key (PSK) authentication to connect to our servers.
However, I understand that apps submitted to the App Store must use SecureTransport as the TLS backend on iOS. My understandiunig is that SecureTransport does not support PSK ciphersuites, which is critical for our security architecture.
Questions:
-
Does SecureTransport support TLS PSK authentication, or are there plans to add this feature?
-
If PSK is not supported, what is Apple's recommended alternative for applications that require PSK-based authentication?
-
Is there an approved exception process that would allow me to use OpenSSL for TLS connections on iOS while still complying with App Store guidelines?
The application requires PSK for secure communication with our infrastructure, and we need guidance on how to maintain feature parity across all platforms while meeting App Store requirements
Albert asked me to chime in here:
I understand that apps submitted to the App Store must use Secure Transport as the TLS backend on iOS.
That’s not right on a couple of levels:
- AFAIK App Review has no requirement that you use a specific TLS implementation [1].
- Secure Transport is deprecated, so it’s not the recommend path for anything (-:
We generally recommend that you use the built-in networking stack. You can access that using Network framework. See TN3151 Choosing the right networking API for more background and links.
Note Network framework does support TLS-PSK.
This recommendation is particularly relevant for TLS, where users expect the TLS behaviour of your app to match the TLS behaviour of the system as a whole, for example, in Safari. However, that’s only applies to TLS-PKI. TLS-PSK requires prior agreement between the client and the server, by definition, and so compatibility isn’t a concern. Thus, while you can use Network framework for this, it’s not completely beyond that pale to use BSD Sockets with a third-party TLS-PSK implementation.
Well, other than the fact that BSD Sockets is horrible, but I expect you’re used to that by now (-:
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
[1] I suspect that you’re thinking of App Transport Security (ATS), but that’s only relevant if you use our high-level HTTP API, URLSession, or stuff layered on top of that.