iOS9 Https技术预研

一、服务器需要做的事情:

1、要注意 App Transport Security 要求 TLS 1.2,

2、而且它要求站点使用支持forward secrecy协议的密码。

3、证书也要求是符合ATS规格的,ATS只信任知名CA颁发的证书,小公司所使用的 self signed certificate,还是会被ATS拦截。。因此慎重检查与你的应用交互的服务器是不是符合ATS的要求非常重要。

二、客户端可使用四种方案:

1、全部Https  2、俩者混合,个别不符合  3、 全部禁用Https

4、  默认禁用https, 但是对于特殊站点,开启Https


1.


HTTPS Only (只有HTTPS,所有情况下都使用ATS)


如果你的应用只基于支持HTTPS的服务器,那么你太幸运了。你的应用不需要做任何改变。但是,注意App Transport Security要求TLS 1.2而且它要求站点使用支持forward secrecy协议的密码。证书也要求是符合ATS规格的。因此慎重检查与你的应用交互的服务器是不是符合ATS的要求非常重要。


2.


Mix & Match(混合)


你的应用与一个不符合ATS要求的服务器工作是很有可能的。在这种情况下,你需要告诉操作系统哪些站点是涉及到的然后在你的应用的 Info.plist文件中指明哪些要求没有达到。


3.


Opt Out(禁用ATS)


如果你在创建一个网页浏览器,那么你有一个更大的麻烦。因为你不可能知道你的用户将要访问那个网页,你不可能指明这些网页是否支持ATS要求且在HTTPS上传输。在这种情况下,除了全部撤销 App Transport Security 没有其它办法。


4.


Opt Out With Exceptions(除特殊情况外,都不使用ATS)


当你的应用撤消了App Transport Security,,但同时定义了一些例外。这非常有用就是当你的应用从很多的服务器上取数据,但是也要与一个你可控的API交互。在这种情况下,在应用的Info.plist文件中指定任何加载都是被允许的,但是你也指定了一个或多个例外来表明哪些是必须要求 App Transport Security的。

使用NSURLConnection支持HTTPS的实现

// Now start the connection

NSURL * httpsURL = [NSURL URLWithString:@"https://www.google.com"];

self.connection = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:httpsURL] delegate:self];

//回调

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {

//1)获取trust object

SecTrustRef trust = challenge.protectionSpace.serverTrust;

SecTrustResultType result;

//2)SecTrustEvaluate对trust进行验证

OSStatus status = SecTrustEvaluate(trust, &result);

if (status == errSecSuccess &&

(result == kSecTrustResultProceed ||

result == kSecTrustResultUnspecified)) {

//3)验证成功,生成NSURLCredential凭证cred,告知challenge的sender使用这个凭证来继续连接

NSURLCredential *cred = [NSURLCredential credentialForTrust:trust];

[challenge.sender useCredential:cred forAuthenticationChallenge:challenge];

} else {

//5)验证失败,取消这次验证流程

[challenge.sender cancelAuthenticationChallenge:challenge];

}

}

使用AFNetworking来支持HTTPS

AFNetworking是iOS/OSX开发最流行的第三方开源库之一,其作者是非常著名的iOS/OSX开发者Mattt Thompson,其博客NSHipster也是iOS/OSX开发者学习和开阔技术视野的好地方。AFNetworking已经将上面的逻辑代码封装好,甚至更完善,在AFSecurityPolicy文件中,有兴趣可以阅读这个模块的代码;

AFNetworking上配置对HTTPS的支持非常简单:

NSURL * url = [NSURL URLWithString:@"https://www.google.com"];

AFHTTPRequestOperationManager * requestOperationManager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];

dispatch_queue_t requestQueue = dispatch_create_serial_queue_for_name("kRequestCompletionQueue");

requestOperationManager.completionQueue = requestQueue;

AFSecurityPolicy * securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

//allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO

//如果是需要验证自建证书,需要设置为YES

securityPolicy.allowInvalidCertificates = YES;

//validatesDomainName 是否需要验证域名,默认为YES;

//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。

//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。

//如置为NO,建议自己添加对应域名的校验逻辑。

securityPolicy.validatesDomainName = YES;

//validatesCertificateChain 是否验证整个证书链,默认为YES

//设置为YES,会将服务器返回的Trust Object上的证书链与本地导入的证书进行对比,这就意味着,假如你的证书链是这样的:

//GeoTrust Global CA

// Google Internet Authority G2

// *.google.com

//那么,除了导入*.google.com之外,还需要导入证书链上所有的CA证书(GeoTrust Global CA, Google Internet Authority G2);

//如是自建证书的时候,可以设置为YES,增强安全性;假如是信任的CA所签发的证书,则建议关闭该验证,因为整个证书链一一比对是完全没有必要(请查看源代码);

securityPolicy.validatesCertificateChain = NO;

requestOperationManager.securityPolicy = securityPolicy;

这就是AFNetworking的支持HTTPS的主要配置说明,AFHTTPSessionManager与之基本一致,就不重复了。

客户端验证Https证书, 有服务器证书和客户端自建证书俩个证书来源, 到时候由服务器同学确定。

相关知识参考:

https://github.com/ChenYilong/iOS9AdaptationTips#1https-only-%E5%8F%AA%E6%9C%89https%E6%89%80%E6%9C%89%E6%83%85%E5%86%B5%E4%B8%8B%E9%83%BD%E4%BD%BF%E7%94%A8ats

http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=211889548&idx=1&sn=8eb4da781c32a7fd51c3ad552347f322&scene=23&srcid=0922zkxfLe07GKN3NfLh8b6k#rd

时间: 2024-10-13 10:43:09

iOS9 Https技术预研的相关文章

Multi-Window技术预研

让我告诉你Multi-Window是什么鬼 在Android N以前,Android是无法像IOS或者传统PC那样舒畅地同时运行多个App的,谷歌曾经在 Android M预览版中提供分屏多任务的功能,但是在正式版中被砍掉了.不过很多厂商在自己的定制ROM中添加了这一功能,如三星.LG在Android 4 的年代就有了这些功能.一些视频应用也支持小窗口播放视频,这主要是利用WindowManager来添加悬浮界面,此外还有一些开源的解决方案,但是也只是在特定的系统版本和高性能的机器上才能支持.但

[转] 前后端分离开发模式的 mock 平台预研

引入 mock(模拟): 是在项目测试中,对项目外部或不容易获取的对象/接口,用一个虚拟的对象/接口来模拟,以便测试. 背景 前后端分离 前后端仅仅通过异步接口(AJAX/JSONP)来编程 前后端都各自有自己的开发流程,构建工具,测试集合 关注点分离,前后端变得相对独立并松耦合 开发流程 后台编写和维护接口文档,在 API 变化时更新接口文档 后台根据接口文档进行接口开发 前端根据接口文档进行开发 开发完成后联调和提交测试 面临问题 没有统一的文档编写规范,导致文档越来越乱,无法维护和阅读 开

Windows Server 2016技术预览

Windows Server 2016是微软将于2016年9月份发布的最新服务器操作系统.目前微软官方发布了许多Windows Server 2016新的功能和特性,下面我们来简单看下: 主要内容 预览版界面 系统需求及安装 服务器管理变化 新特性及变化 预览版界面 服务器界面,沉浸而不渲染 登录界面,色调变得活泼起来,用户图像由原先Windows2012的方块变成圆形 继续 进入系统,乍一看,以为是WIN10呢,注意右下角 如此做法,似乎在传递win10的最佳服务器系统就是他了 开始菜单,Al

06、Windows 10 技术预览

随着 Windows 10 发布的,未来 Windows 平台都是统一开发模型,可以只写一个 Appx 包,就可以同时部署到 Windows/ Windowsw Phone/ Tablet /xbox ..平台上了,我们几个 Windows 组的同事也是摩拳擦掌,希望写一 个用户体验很好的客户端. 看了一下 MSDN 最新发布的文档和视频教程,这里作为笔记,大概总结了一下在 Windows 10上,针对 Windows 8.1 和 WP 上的一些技术更新. 贴一张视频里面聚合的路线图: MSDN

微软发布Azure Stack第一个技术预览版

为了提升商业灵敏度和加快创新步伐,各个企业都在迅速地转向云服务.在微软,我们已经见到微软智能云Azure的飞速发展和使用,每月我们都有近十万的新增订阅量.然而,我们也了解到还有很多企业在完全移到公有云这点上仍然存有业务上的顾虑,像在数据主权或符合监管要求方面的考虑.而这就让他们处于一个比较复杂的境遇,即一脚驻足于公有云.一脚仍留在本地的数据中心. 为了管理这种复杂性,微软认为企业需要把云作为一种模式,而不仅仅是一个位置.这个模式连接基础设施,应用和人,以混合云的方式,实现私有云,托管云(host

Windows 10、Windows Server、System Center、Office 2016 Technical Preview技术预览版下载体验

?? 继Windows 10.Windows Server.System Center Technical Preview技术预览版开放下载体验后,Office 2016 Technical Preview技术预览版也开放下载了,这些产品预计2015年下半年正式发布. Windows 10 Technical Preview技术预览版下载方法: http://blog.csdn.net/dennymvp/article/details/39716789 Office 2016 Technical

Office 2016 技术预览版本下载首发图文教程

本文介绍了如何下载Office 2016 技术预览版本的方法,关于安装,请参考如下博文: Office 2016 技术预览版本安装图文教程 微软目前还在内测下一代 Windows 桌面版 Office 2016,不过微软似乎开放了测试的入口.任何人可以访问 MS Connect 站点,自行加入 Office 2016 技术预览版的测试,而且可以下载最新 Office 预览版测试. 访问 Microsoft Connect 测试目录 找到 Microsoft Office 产品 > Office

微软发布Win10:技术预览版免费下载

微软今日如约放出了Windows 10技术预览版的下载,大家现在就可以免费下载Windows 10技术预览版ISO文件,安装并开启体验. Windows 10技术预览版首批提供了英语.简体中文.葡萄牙语,含32位.64位. Windows 10技术预览版简体中文版64位大小为3.96GB,32位大小为3.05GB. 产品密钥:NKJFK-GPHP7-G8C3J-P6JXR-HQRJR Windows 10技术预览版简体中文版官方下载: 64位:http://go.microsoft.com/fw

Windows 10 技术预览版抢先体验

Windows 10 是微软公司新一代操作系统,即传说中的Windows Threshold,NT内核为6.4.该系统于2014年9月30日(美国东部时间, 北京时间2014年10月1日)发布开技术预览版.北京时间10月2日凌晨开放下载技术预览版[1] .该操作系统可能会是微软的最后一款操作系统(即不再有大更新). Windows 10正式版将于2015年发布,将涵盖PC.平板电脑.手机.XBOX和服务器端,芯片类型将涵盖Intel.AMD和ARM[2] . 上面文字引述百度百科内容. ====