关于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 中新加入了NSAllowsArbitraryLoadsInWebContent
和NSAllowsArbitraryLoadsForMedia
键。通过将它们设置为YES
, 可以让你的app中的UIWebView
、WKWebView
或者使用AVFoundation
播放的在线视频不受ATS的限制。不过还是需要在审核的时候进行相关说明。但是这个键在iOS9 中不会起作用。 -
备注
1.如果你需要使用内网,可以设置NSAllowsLocalNetworking
,而不必担心SSL连接的问题。
2.有效的NSAppTransportSecurity
字典结构
NSAppTransportSecurity : Dictionary {
NSAllowsArbitraryLoads : Boolean
NSAllowsArbitraryLoadsForMedia : Boolean
NSAllowsArbitraryLoadsInWebContent : Boolean
NSAllowsLocalNetworking : Boolean
NSExceptionDomains : Dictionary {
<domain-name-string> : Dictionary {
NSIncludesSubdomains : Boolean
NSExceptionAllowsInsecureHTTPLoads : Boolean
NSExceptionMinimumTLSVersion : String
NSExceptionRequiresForwardSecrecy : Boolean // Default value is YES
NSRequiresCertificateTransparency : Boolean
}
}
}