iOS ATS / HTTPS的问题

ATS:

App Transport Security应用程序传输安全机制

iOS 9起苹果就开始推荐使用HTTPS,iOS 9中默认是禁止非HTTPS的协议来访问网络的.

想App继续访问非HTTPS呢?
解决方法:
1、在Info.plist中添加NSAppTransportSecurity类型Dictionary。
2、在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean值设为YES。

2017年1月1日起苹果提出所有新提交的App默认不允许使用NSAllowsArbitraryLoads来绕过ATS的限制。
也就是说强制我们用HTTPS,

那么一些第三方的SDK并没有及时支持HTTPS怎么解决呢?
解决办法:
把不支持HTTPS的第三方接口添加到NSExceptionDomains白名单中配置如下:
1、在Info.plist中添加NSAppTransportSecurity类型Dictionary。
2、在NSAppTransportSecurity中添加NSExceptionDomains类型Dictionary。
3、在NSExceptionDomains中添加要支持的域(也就是非HTTPS的接口地址),域作为Key,类型为Dictionary。

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>qq.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
          </dict>
   </dict>


HTTPS必然会遇到证书的问题
  1. 自签证书
    证书必须是xxx.cer格式,拖入项目的bundle里面。在 challenge方法内 读取服务器来的证书,和工程内的证书比对。。

  2. 公信机构颁发的证书

是从哪里买的或者是使用限时免费版只要符合苹果官方的证书要求,具体要求参考:Apple-NSAppTransportSecurity。那么什么都不要设置,只需要启用项目的ATS,就可以HTTPS请求了。。
如果还想添加其它只支持HTTP的请求,按前面Exception Domains的设置即可。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容