iOS适配HTTPS
自2017年1月1日起,提交到App Store的所有APP必须遵循ATS(App Transport Security)。也就是说,应用内的网络连接必须使用安全连接。
前言
HTTPS最初由网景公司使用,在HTTP应用层使用SSL协议保证数据安全,故称HTTPS。随着SSL的发展,演变为TSL。具体区别和联系可以参照这篇Blog—— SSL与TLS 区别以及介绍 。本文主要讲述如何在iOS中适配,对于HTTPS原理不多做解释。这里需要强调的是TSL 1.2以上的HTTPS是完全正向保密(Perfect Forward Secrecy)的,而1.2以前的版本则存在以后被破解的风险。这一点涉及到后面的APP配置,需要留意。
设置Info.plist
为了适配iOS9下的HTTP请求,很多人在Info.plist中做了如下设置。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
如今HTTP即将成为历史,这个设置也大可以删掉。
如果你使用TSL 1.2(含)以上的HTTPS连接,是无需设置的。如果你使用1.2以下的HTTPS连接,还需要做以下设置。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>domain-name-string</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
这里还有一个NSIncludesSubdomains用于配置允许子域名访问的,可以按需设置。
代理中处理证书
这里使用Swift2.3(与Swift2.2几乎一样),日后可能更新Swift3的代码。在NSURLSession的delegate里,做如下处理。
func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
let credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!)
completionHandler(.UseCredential, credential)
}
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
completionHandler(.Allow)
}
Tips
使用如下指令可以不同参数下查询ATS状态。
➜ ~ /usr/bin/nscurl –ats-diagnostics –verbose https://apple.com
转载请注明:iOS适配HTTPS - 编程知识库
您可能还会对这些文章感兴趣
2016-12-23 101次iOS 码农的微信小程序开发总结
最近公司需要一个微信小程序demo去给客户看,就研究了几天。 下面就说说开发微信小程序的时候遇到的一些问题,对于小程序的开发教程就不细说了,很多人都写的比我好。下面就说一些我个人觉得比较实用的。 快速创建页面 刚开始开发小程序的时候,一个个创建对应页面的...
2016-12-23 188次微信小程序0.11.122100版本新功能解析
微信小程序0.11.122100版本新功能解析 时间 2016-12-22 08:15:21 小楼昨夜又秋风 相似文章 (1) 原文 https://zhuanlan.zhihu.com/p/24498136 主题 微信小程序开发 iOS开发 新版本就不再吐槽了,整的自己跟个愤青似的。人老了,喷不动了,把机会留给年轻人吧。...
2016-12-23 241次iOS后台定位并上传地理信息(滴滴打车类项目需求)
说起后台定位我们的说下以前iOS的那点事,在很早的版本里,后台运行程序不被iOS系统所认可,为啥呢,一个是耗电,一个违背了iOS运行的快照机制,所以说在以前程序置于后台后只有5秒的可操作时间,当然我们也可以申请去 加时间,但是系统只允许最大为10分钟的后台干活...
2016-12-23 133次【iOS定位功能】ios城市定位功能实现
小序: 本文包括三个内容: ①:定位功能的实现 ②:知道城市名拿到经纬度 ③:根据经纬度拿到日出日落时间 关于定位我们要添加 #import <CoreLocation/CoreLocation.h> 头文件 一、定位功能 先创建这两个对象(这里是全局私有): CLLocationManager* _manager //...
大家正在看
- linux 系统中Mysql 进程占用cpu过高的解决
- 二类电商是什么意思? 二类电商有哪些?暴利二类电商还好做吗?
- 【二类电商广点通投放指南】二类电商广点通投放值不值
- 密码保护:支付宝突破微信封锁唤起支付宝代码
- Host is not allowed to connect to this MySQL server解决方法
- 密码保护:移动端js自动复制代码
- linux数据库调优,WordPress MySQL占用cpu高数据库优化
- 2017 年十大网页设计趋势
- 网页端的VR实现离我们还远么?
- 最完整的Chrome浏览器客户端调试大全
- iPhone用户人均每天遭电话骚扰1次
- 3G电子化销售服务系统
- Java WeakReference的理解与使用
- 搞清楚 Python traceback