这次主要看一下文件夹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. java中?和A、B、T、E、K、V的区别

    使用泛型 List<T> list = new ArrayList<T>(); T t = list.get(0); 不使用泛型 List list = new ArrayLi ...

  2. web.xml配置文件中<async-supported>true</async-supported>报错的解决方案

    为什么用到这个: ssh集成了cxf,当登录系统后,发现系统报错,控制台不断输出下面信息: 2016-05-05 11:05:06 - [http-bio-8080-exec-4] - WARN - ...

  3. ios开发常见问题及解决办法

    1 . storyboard连线问题 产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性. 解决: 点击view controller    点击这排 ...

  4. 二、C# 数据类型

    C#语言的基本类型包括8种整数类型.2种用于科学计算的二进制浮点类型.1种用于金融计算的十 进制浮点类型.1种布尔类型以及1种字符类型. 2.1 基本数值类型 C#中的基本数据类型都有关键字和它们关联 ...

  5. Python 3中bytes和str的分别

    最近把一段py2的代码转换到py3的代码,结果运行到向socket中写数据的代码部分出现了'str' does not support the buffer interface这样一个错误. 一番搜索 ...

  6. Java获取昨天的时间

    Calendar   cal   =   Calendar.getInstance();  cal.add(Calendar.DATE,   -1);  String yesterday = new ...

  7. Uncaught SyntaxError: Unexpected end of input

    js报错  原因:输入的意外终止…… 页面代码写的不规范啊……其中的某条语句,没有正常结束…… 或者部分语句“‘’”双引号,单引号没有配对好,被转义了之类的……错误造成的 代码: <script ...

  8. Phalcon 的 bootstrap.php 自动加载完成;非常人性化的设计

    <?php /** * Bootstraps the application */ use Phalcon\DI\FactoryDefault as PhDi, Phalcon\Config a ...

  9. php网站判断用户是否是手机访问的方法

    PHP网站判断用户是否用手机访问,如果是手机的话,就跳转到指定的手机友好页面.随着移动设备的普及,网站也会迎来越来越多移动设备的访问.用适应PC的页面,很多时候对手机用户不友好,那么有些时候,我们需要 ...

  10. Python 函数传递list,传递dict 以及*args和**kargs

    函数之间传递list: def show(ll): for i in ll: print(i) show(['chen','hang','wang','yadan']) #============== ...