iOS开发之HTTPS
起因
在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能。App Transport Security(ATS)是苹果在iOS 9中引入的一项隐私保护功能,屏蔽明文HTTP资源加载,连接必须经过更安全的HTTPS。苹果目前允许开发者暂时关闭ATS,可以继续使用HTTP连接,但到年底所有官方商店的应用都必须强制性使用ATS。
HTTPS和HTTP
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版,HTTPS = HTTP + SSL/TLS。即在HTTP下加入了SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的保护。HTTPS的信任基于预先安装在浏览器中的证书颁发机构(如VeriSign、Microsoft等)(意即“我信任证书颁发机构告诉我应该信任的”),因此该网站的HTTPS连接可被信任,如果服务器搭建自己的https 也就是说采用自认证的方式来建立https信道,这样一般在客户端是不被信任的。所以我们一般在浏览器访问一些https站点的时候会有一个提示,问你是否继续。(苹果官网是强制安装证书的,不会询问用户)。
HTTPS和HTTP的区别主要为以下四点:
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
代码实现
如果是自己使用NSURLSession来封装网络请求,涉及代码如下:1
2
3
4
5NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:@"https://www.apple.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}];
[task resume];
下面我们实现代理方法,在代理方法中处理证书。如果你的请求是HTTP而不是HTTPS是不走该代理方法的:
1 | /* |
如果是使用AFN
框架,那么我们不需要做任何额外的操作,AFN内部已经做了处理。但是对于对于自制证书的网站还需要进行一些设置:
1 | AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; |
小结
虽然HTTPS相比于HTTP来说,会有一定的性能上的劣势,但对于网络飞速发展,移动设备的性能成倍增长的今天,安全才是我们更应该去考虑的。全网HTTPS并不是那么遥远。