关于iOS强制使用HTTPS的问题及现有对策

  • 背景

    • WWDC15 提出的ATS(App Transport Security)是Apple 在推进网络通讯安全的一个重要方式。在iOS 9 和 OS X 10.11中,默认情况下非HTTPS的网络访问是被禁止的。作为缓冲,我们可以在info.plist中通过以下方式来禁用ATS。
    • WWDC16中, Apple表示将继续收紧对普通HTTP的访问限制。从2017年1月1日起,所有的新提交app默认是不允许使用Allow Arbitrary Loads来绕过ATS限制的。
  • 现有对策
    1.继续沿用iOS9中使用的方法,只不过提交审核的时候,需要进行相应的原因说明,但是如果理由不充分的话Apple有很大可能拒绝通过你的app;
    2.选择使用域名白名单(NSExceptionDomains), 通过设定该域名下的NSExceptionAllowsInsecureHTTPLoads来开放HTTP。如果只是针对特定的第三方服务器的话,可以选择使用诸如第三方服务器没有进行HTTPS配置的说辞来规避审核,但是如果访问的是自己的服务器,那还是需要全部HTTP内容开放,可能这个理由会无法通过;
    3.对于网页浏览和视频播放,iOS10 中新加入了NSAllowsArbitraryLoadsInWebContentNSAllowsArbitraryLoadsForMedia 键。通过将它们设置为 YES, 可以让你的app中的UIWebViewWKWebView 或者使用AVFoundation 播放的在线视频不受ATS的限制。不过还是需要在审核的时候进行相关说明。但是这个键在iOS9 中不会起作用。

  • 备注
    1.如果你需要使用内网,可以设置NSAllowsLocalNetworking,而不必担心SSL连接的问题。
    2.有效的NSAppTransportSecurity字典结构
    NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean
    NSAllowsArbitraryLoadsForMedia : Boolean
    NSAllowsArbitraryLoadsInWebContent : Boolean
    NSAllowsLocalNetworking : Boolean
    NSExceptionDomains : Dictionary {
    : Dictionary {
    NSIncludesSubdomains : Boolean
    NSExceptionAllowsInsecureHTTPLoads : Boolean
    NSExceptionMinimumTLSVersion : String
    NSExceptionRequiresForwardSecrecy : Boolean // Default value is YES
    NSRequiresCertificateTransparency : Boolean
    }
    }
    }

  • 参考资料
    关于 iOS 10 中 ATS的问题
    iOS 10 与 ATS - 更加安全的机制

你可能感兴趣的:(关于iOS强制使用HTTPS的问题及现有对策)