zoukankan      html  css  js  c++  java
  • AFNetworking (3.1.0) 源码解析 <四>

    这次主要看一下文件夹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/

  • 相关阅读:
    CF938E Max History
    经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷
    在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.2)
    在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.1)
    Java概述
    算法 --- 二分法 冒泡排序 递归 快速排序
    二维数组
    数组
    SNMP "Simple Network Management Protocol" "简单网络管理协议"。
    常用api --- BigDecimal 包装类 Integer Arrays
  • 原文地址:https://www.cnblogs.com/qiutangfengmian/p/5708384.html
Copyright © 2011-2022 走看看