在 App Transport Security 下与用户服务器通信

Communicating with user servers under App Transport Security

我目前正在开发一个应用程序,需要连接到用户提供的服务,也可能需要连接到用户托管的服务。这些服务并不都支持 HTTPS。在过去,尽管有 App Transport Security,NSAllowsArbitraryLoads 仍能让用户连接到这些服务。据我了解,NSAllowsArbitraryLoads 将在没有任何直接替代的情况下很快被弃用。

我有两个关于应用程序传输安全的问题:

沿着这条线,我的应用程序还应该支持不受信任的 TLS 证书。目前,我计划在 URLSessionTaskDelegate 的 urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) 中实现它。

这是处理这种情况的有效且允许的方式吗?

干杯!

NSAllowsArbitraryLoads 不会被弃用。您仍然可以使用它。但是从 2017 年 1 月开始,将会有一个新的限制:在没有充分理由的情况下,在 info.plist 中定义了 ATS 例外的应用程序将不再被批准。 (这仅适用于新版本。目前 AppStore 上的任何版本都不会受到影响。)

在开发者论坛中查看 Session 706 of the WWDC 2016 for more information. This thread 也可能包含一些对您有用的信息。


使用 URLSession 仍然有效。您不必更改任何代码。但如果没有 ATS 例外,您需要受信任的 TLS 证书。