AFNetwork 3.0 源码解读(五)AFSecurityPolicy

本文深入解析AFNetwork 3.0中的AFSecurityPolicy,探讨HTTPS连接的安全流程,包括服务器证书验证、非对称加密通信以及数据的对称加密传输,确保客户端与服务器间的数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


First
我们需要了解下到底什么是HTTPS请求,和HTTPS的原理是什么。

HTTP是一种超文本传输协议, HTTP协议传输的数据都是未加密的,也就是明文的。所以使用HTTP协议传输隐私数据时非常不安全的。 于是网景公司 在1994年 设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS( Hyper Text Transfer Protocol over Secure Socket Layer )。

HTTPS的工作原理:


上图展示了一个网页完整的HTTPS请求的过程。 http://blog.youkuaiyun.com/sean_cd/article/details/6966130
  1. 客户端输入网址https://www.domain..com,连接到server的443端口。
  2. 服务器返回一个证书(包含公钥、和证书信息,如证书的颁发机构,过期时间等),证书由服务器所拥有的私钥非对称加密生成。
  3. 客户端对证书进行验证(首先会验证证书是否有效,比如颁发机构,过期时间等等)。
  4. 如果客户端验证通过,客户端生成一个随机数,在用服务器返回的证书(公钥)进行加密传输。
  5. 因为公钥是通过服务器的私钥生成,所以服务器是可以对客户端的传回的加密数据进行对称解密的。服务器拿到由客户端生成的随机数,对要传递的数据使用随机数加密。
  6. 客户端收到服务器使用随机数加密的数据进行解密。

     不过在app的开发中因为我们的app通常只需要和一个服务器端进行交互,所以不必要每次请求都从服务器那边获取证书(公钥),在开发中app直接将服务器对应生成的证书(公钥)放在沙盒中,HTTPS请求时只要直接和服务器返回的证书(公钥)进行比对。如果验证通过则使用公钥进行加密在传递回服务器。
     这样即使app中的证书(公钥)被截取,中间人使用证书冒充了服务器与客户端进行通信时(通过了验证),但因为从app返回的数据都是通过证书(公钥)加密的。而中间人从app截取的证书时公钥,缺少对应的私钥即使截获了信息也无法解密。能够最大的程度的保护传递的信息安全。

      PS: 从上面的通信过程中,最重要的是存储在服务器的私钥。因为只有私钥生成了在通信过程中传递的证书(公钥),且只有通过私钥才能对公钥加密的信息进行解密,所以在开发过程中保护好私钥的安全。


second

苹果已经封装了HTTPS连接的建立、数据的加密解密功能,我们直接可以访问https网站的,但苹果并没有验证证书是否合法,无法避免中间人攻击。要做到真正安全通讯,需要我们手动去验证服务端返回的证书。 AFNetwork中的AFSecurityPolicy模块主要是用来验证HTTPS请求时证书是否正确。  AFSecurityPolicy封装了证书验证的过程,让用户可以轻易使用,除了去系统信任CA机构列表验证,还支持SSL  Pinning方式的验证。


AFSecurityPolicy组成:

其他
  •   SSLPinningMode 
  •   pinnedCertificates 
  •   allowInvalidCertificates  
  •   validatesDomainName  

@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode
验证证书的模式:
AFSSLPinningModeNone:  这个模式表示不做SSL pinning,只跟浏览器一样在系统的信任机构列表里验证服务端返回的证书。若证书是信任机构签发的就会通过,若是自己服务器生成的证书,这里是不会通过的。
AFSSLPinningModeCertificate: 这个模式表示用证书绑定方式验证证书,需要客户端保存有服务端的证书拷贝,这里验证分两步,第一步验证证书的域名/有效期等信息,第二步是对比服务端返回的证书跟客户端返回的是否一致。
AFSSLPinningModePublicKey: 这个模式同样是用证书绑定方式验证,客户端要有服务端的证书拷贝,只是验证时只验证证书里的公钥,不验证证书的有效期等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FY_Chao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值