iOS9的ATS(App Transport Security)
来源:互联网 发布:红外算法 编辑:程序博客网 时间:2024/06/02 17:38
注:本文仅适用于iOS9,最新的iOS10机制有所更新。(2016.9.19)
0x00问题
在建立HTTPS连接时,在iOS8上测试正常的代码,在iOS9报错:
NSURLSession/NSURLConnectionHTTP load failed (kCFStreamErrorDomainSSL, -9802)
0x01分析
原因是iOS9引入了新的机制,App Transport Security(ATS)。ATS将所有HTTP连接强制转化为HTTPS。对于服务器有如下要求:
1.支持TLSV1.2
2.证书必须由SHA-2或ECC(密钥256位以上)或RSA(密钥2048位以上)
3.服务器须支持forwardsecrecy(FS):
- 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
官方资料链接:https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html
检查服务器配置后发现,证书的签名算法时SHA1,不满足以上要求,因此连接会被系统拒绝。
0x02NSAppTransportSecurity
在info.plist文件中加入以下代码,可以关闭ATS,就不会报错了。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAppTransportSecurity配置项如下:
Key
Type
Description
NSExceptionDomains
Dictionary
定义特殊的域名,每个key是一个域名的字符串。通过定义它可以标志对于某些域名特殊处理。
NSIncludesSubdomains
Boolean
如果设置为YES,将规则应用到所有子域名。默认为NO。
NSExceptionAllowsInsecureHTTPLoads
Boolean
如果设置为YES,允许指定的域名使用不安全的HTTP访问。将允许无证书的连接,证书不合法,主机名和证书中不符合等情况。默认值为NO。
NSExceptionRequiresForwardSecrecy
Boolean
- 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
控制域名是否支持forward secrecy(FS)。
默认值是YES,使用ATS连接时必须使用以下加密算法
NSExceptionMinimumTLSVersion
String
- TLSv1.0
- TLSv1.1
- TLSv1.2(默认值)
设置TLS(Transport Layer Security)的最低支持版本,可选值为:
NSAllowsArbitraryLoads
Boolean
如果设置为YES,所有NSExceptionDomains没有列出的域名将不使用ATS。默认为NO。
- iOS9的ATS(App Transport Security)
- App Transport Security (ATS)
- App Transport Security(ATS)
- App Transport Security(ATS)
- App Transport Security(ATS)
- App Transport Security(ATS)
- App Transport Security(ATS)
- iOS9中新增App Transport Security(简称ATS)特性,
- iOS ATS (App Transport Security)
- 关于iOS9中的App Transport Security(ATS)相关说明及适配
- Xcode新特性App Transport Security (ATS)
- App Transport Security(ATS)学习笔记
- iOS9 App Transport Security 如何应对?
- iOS9种关于App Transport Security详细说明
- 如何应对IOS(苹果)强制启用 App Transport Security(ATS)安全功能
- App Transport Security
- App Transport Security
- iOS: App Transport Security
- 3GPP 36211-c70-7
- 网卡的ring buffer调整
- iOS 后台定位
- Splinter
- [c++]杨辉三角
- iOS9的ATS(App Transport Security)
- Git入门
- Effective C++ 读书笔记3
- Android Graphics.drawable之—TransitionDrawable学习
- 阿里巴巴那些Niubilitious算法工程师的要求
- 整除的尾数
- PE重装windows系统
- OP279
- 利用Tomcat管理数据源