iOS9的ATS(App Transport Security)
2015-12-10 23:03
375 查看
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配置项如下:
在建立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 | 控制域名是否支持forward secrecy(FS)。 默认值是YES,使用ATS连接时必须使用以下加密算法 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 |
NSExceptionMinimumTLSVersion | String | 设置TLS(Transport Layer Security)的最低支持版本,可选值为: TLSv1.0 TLSv1.1 TLSv1.2(默认值) |
NSAllowsArbitraryLoads | Boolean | 如果设置为YES,所有NSExceptionDomains没有列出的域名将不使用ATS。默认为NO。 |
相关文章推荐
- iOS 8 自动布局sizeclass和autolayout的基本使用
- 06.iOS自动检测更新
- Android
- 蓝懿iOS 技术内容和心得 12.10
- Android仿QQ长按删除弹出框
- Android学习笔记——Android PullToRefresh (ListView,GridView 下拉刷新) 使用介绍
- Android源码解析之四:View事件分发机制
- NSObject
- Android异步任务处理之Thread线程
- 关于 Object.prototype.toString.call() 方法
- Android 分组listview 简易实现方法
- Android 自定义View修炼-自定义加载进度动画XCLoadingImageView
- 六要点实现Unity3D开发性能优化
- iOS运用fabric记录crash日志过程
- Ashmem 对 Android 内存分配与共享的增强
- JQuery获取append后的动态元素:live()和on()
- iOS常用开发资源整理
- WebView的使用
- Android粒子进度条
- ios 第二课 类的初始化