苹果ATS配置
苹果规定 从2017年1月1日起,新提交的 app 不允许使用 NSAllowsArbitraryLoads 来绕过 ATS 的限制。以前为了能兼容 http 和不满足规定的 https,最简单的做法就是:将 NSAllowsArbitraryLoads 设为YES。即:
但是,现在这个方式已经被苹果给禁止了。
使用默认的ATS设置要满足:
1、https 要基于TLS 1.2或以上版本。
2、证书的加密的算法要至少要SHA256的算法,用至少是2048位的RSA的key 或至少是256位的Elliptic-Curve(ECC)的key所产生的证书
3、加密算法也是有限制,就是ATS中的ForwardSecrecy(超前的密码保护算法)配置项,需要在以下列表中,详见:苹果文档。
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
如果不符合上述3各要求,请求接口会报错如下:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
如何适配
苹果公司只是禁用了NSAllowsArbitraryLoads选项,而我们可以通过其他的选项来兼容之前的接口。如下: