iOS ATS / HTTPS的问题

2020-12-31  本文已影响0人  红色海_
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的设置即可。

上一篇下一篇

猜你喜欢

热点阅读