ATS

一)

起因:由于苹果规定2017年1月1日以后,所有APP都要使用HTTPS进行网络请求。

之前,可以在Info.plist中禁用ATS功能,按如下设置即可。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

1月1日后,也许这样设置没有用了。

二)。

 将项目中的  NSAllowsArbitraryLoads 设为No。之后发现项目跑不通,报错“发生了SSL错误”

用命令发现,公司的部分URL不满足ATS要求。

/usr/bin/nscurl --ats-diagnostics [--verbose] URL

 

ATS检测网站:https://www.qcloud.com/product/ssl

 

 

苹果强制升级的HTTPS需要满足iOS9中新增App Transport Security(简称ATS)特性:

 

1.必须是苹果信任的CA证书机构颁发的证书

2.后台传输协议必须满足: TLS1.2 

3.签字算法只能是下面的一种:

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

 

4.证书必须使用SHA256或者更好的哈希算法进行签名,要么是2048位或者更长的RSA密钥,要么就是256位或更长的ECC密钥。

 

 

三) 

其中一个服务器,通过添加TLS1.2 ,之后跑通了ATS,但是APP仍然报错。

 

最后发现,是因为虽然跑通了ATS,但是证书不受苹果信任,需要将证书导入项目中。

导出证书方法如下:

 

 

openssl s_client -connect www.google.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > https.cer"

并且在代码中使用我们的cer

        NSString *cerPath                = [[NSBundle mainBundle] pathForResource:@"XXXXX" ofType:@"cer"];
        NSData *certData                 = [NSData dataWithContentsOfFile:cerPath];
        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
        [securityPolicy setAllowInvalidCertificates:NO];
        [securityPolicy setPinnedCertificates:@[certData]];
        [securityPolicy setValidatesDomainName:YES];
        
        manger.securityPolicy = securityPolicy;

 

 

参考网址:

https://www.qcloud.com/product/ssl

苹果ATS(强制HTTPS)审核新政解码

关于 iOS 10 中 ATS 的问题

正确使用AFNetworking的SSL保证网络安全

关于iOS9中的App Transport Security相关说明及适配(更新于2016.7.1)

 

 

posted @   尘恍若梦  阅读(293)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示