这次主要看一下文件夹Security中的类AFSecurityPolicy----安全策略类。

AFSecurityPolicy主要的作用是验证HTTPS请求证书的有效性,在iOS9之后,默认不能发送HTTP请求,如果想要发送HTTP请求,需要在plist里边设置NSAppTransportSecurity的NSAllowsArbitraryLoads为true,这样就可以支持HTTP请求。

首先还是看一下.h文件

可以看到一个枚举,表示SSL Pinning的模式,如下

`AFSSLPinningModeNone`----Do not used pinned certificates to validate servers.

`AFSSLPinningModePublicKey`----Validate host certificates against public keys of pinned certificates.

`AFSSLPinningModeCertificate`----Validate host certificates against pinned certificates.

第一个,在证书列表中校验服务端返回的证书

第二个,客户端要有服务端的证书拷贝,只是验证时只验证证书里的公钥

第三个,客户端要有服务端的证书拷贝,第一步先验证证书域名或有效期等信息,第二步对服务端返回的证书和客户端返回的是否一致。

这个是证书集合,泛型里面表示了集合里面是NSData类型,表明这个是用来存证书数据的集合,这些证书根据SSL Pinning模式来和服务器进行校验,默认是没有证书的,我们需要调用+ certificatesInBundle:方法将bundle里面的证书文件转成里面是data类型的集合。

还有两个属性

是否信任带有一个无效或者过期的SSL证书的服务器,默认不信任。

是否验证在证书的CN范围的域名,默认是。

接下来看一下.m中的初始化方法

一.这种是默认策略,AFSSLPinningModeNone

二.自定义一个安全策略,然后读取cer文件放到集合里面

设置证书的时候,就是把上面初始化时传入的证书取出公钥(在for循环中获取),再把公钥保存到mutablePinnedPublicKeys集合中。

取出公钥的方法如下  (内部静态方法)

取出证书SecCertificateRef---生成证书数组---生成SecPolicyRef---从SecPolicyRef中取出公钥---最后释放一些资源。

这个方法用来验证服务端是否是受信的

如有转载,请注明出处

参考文章:http://zeeyang.com/2016/05/22/AFNetWorking-three/

AFNetworking (3.1.0) 源码解析 <四>的更多相关文章

  1. AFNetworking (3.1.0) 源码解析 <三>

    今天要介绍的是Reachability文件夹下的AFNetworkReachabilityManager类.通过字面意思我们就可以知道AFNetworkReachabilityManager是用来监测 ...

  2. AFNetworking2.0源码解析<三>

    本篇说说安全相关的AFSecurityPolicy模块,AFSecurityPolicy用于验证HTTPS请求的证书,先来看看HTTPS的原理和证书相关的几个问题. HTTPS HTTPS连接建立过程 ...

  3. AFNetworking (3.1.0) 源码解析 <六>

    这次继续介绍文件夹Serialization下的类AFURLResponseSerialization.这次介绍就不拆分了,整体来看一下.h和.m文件. 协议AFURLResponseSerializ ...

  4. AFNetworking (3.1.0) 源码解析 <五>

    这次主要开始讲解一下文件夹Serialization下的类AFURLRequestSerialization. AFURLRequestSerialization类遵守`AFURLRequestSer ...

  5. AFNetworking (3.1.0) 源码解析 <一>

    首先说一下AFNetworking的github地址:GitHub - AFNetworking/AFNetworking: A delightful networking framework for ...

  6. AFNetworking (3.1.0) 源码解析 <二>

    这次讲解AFHTTPSessionManager类,按照顺序还是先看.h文件,注释中写到AFHTTPSessionManager是AFURLSessionManager的子类,并且带有方便的HTTP请 ...

  7. solr&lucene3.6.0源码解析(三)

    solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...

  8. Heritrix 3.1.0 源码解析(三十七)

    今天有兴趣重新看了一下heritrix3.1.0系统里面的线程池源码,heritrix系统没有采用java的cocurrency包里面的并发框架,而是采用了线程组ThreadGroup类来实现线程池的 ...

  9. solr&lucene3.6.0源码解析(四)

    本文要描述的是solr的查询插件,该查询插件目的用于生成Lucene的查询Query,类似于查询条件表达式,与solr查询插件相关UML类图如下: 如果我们强行将上面的类图纳入某种设计模式语言的话,本 ...

随机推荐

  1. (转)DEDECMS模板原理、模板标签学习 - .Little Hann

    本文,小瀚想和大家一起来学习一下DEDECMS中目前所使用的模板技术的原理: 什么是编译式模板.解释式模板,它们的区别是什么? 模板标签有哪些种类,它们的区别是什么,都应用在哪些场景? 学习模板的机制 ...

  2. DbProviderFactories.GetFactory Oracle.ManagedDataAccess.Client

    因为最近项目,要使用微软的EF框架不安装Oracle客户端的情况下,访问Oracle数据库.调用如下代码的时候会报错. System.Data.Common.DbProviderFactories.G ...

  3. iOS在Cocoa Touch Static Library使用CocoaPods

    1.在XCode中新建静态库工程:DDLogLib. 2.添加对外暴露接口的头文件DDLogLibHeader.h 3.命令行进入DDLogLib目录,运行pod init,并修改Podfile 4. ...

  4. Java简介(4)-关键字

    abstract assert boolean break byte byte case catch char class const continue default do-while double ...

  5. exit() die return 的区别

    rutrun 会返回一个值,或不返回值 只是当前函数内return后面的语句将不会执行,后面的其它语句继续执行exit()可以返回值,也可以不返回值直接终止程序 函数输出一条消息,并退出当前脚本. 会 ...

  6. JS 操作Dom节点之CURD

    许多优秀的Javascript库,已经封装好了丰富的Dom操作函数,这可以加快项目开发效率.但是对于非常注重网页性能的项目来说,使用Dom的原生操作方法还是必要的. 1. 查找节点 document. ...

  7. hdu2524 (求矩形个数,水题。。。)

    hdu 2524 N - 暴力求解.打表 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  8. __file__ __name__ __doc__ argv详解

    __file__:表示输出当前py文件的路径 __name__: 表示输出当前函数名称,是main()函数(入口函数),或者是其他函数 __doc__: 模块的对象,输出模块的版权信息,如:作者 ch ...

  9. 一起学习iOS开发专用词汇,每天记3个,助你变大牛-b

    大家做开发最大的问题是什么?英语的问题应该困扰很多的同学的地方,我们提倡科学学习开发中的常用词汇.我们不要求大家有特别好的听.说.写,只要能够记住,能够认识这些常用词汇你以后的开发也将游刃有余.我们的 ...

  10. Coupons

    uva10288:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&am ...