iOS开发 – 用AFNetworking实现https单向验证,双向验证

百度已收录,点击一下,找找看!

https相关

自苹果宣布2017年1月1日开始强制使用https以来,htpps慢慢成为大家讨论的对象之一,不是说此前https没有出现,只是这一决策让得开发者始料未及,博主在15年的时候就做过https的接口,深知此坑之深,原因就是自身对这方面知识不了解加上网上的资料少,除此外还有博客不知对错就互相转载,导致当时网上几乎找不到能用的代码,这一点,博主说的毫不夸张。

鉴于此,博主一直想填一下这个坑,多增加一些正确的代码,来供广大开发者使用,后来一直被搁置,经过尝试后,博主现将整理好的代码发布在这里,希望能帮到焦急寻找的开发者。

1.先来说说老的AFNetworking2.x怎么来实现的 
博主在网上看过几篇帖子,其中说的一些方法是正确的,但是却并不全对,由于那几篇博客几乎一样,博主不能确定最早的那篇是谁写的,所以就重新在下面说明下方法:

1)倒入client.p12证书;

2)在plist文件做如图配置: 
iOS开发 – 用AFNetworking实现https单向验证,双向验证
各个项代表的含义请看这篇博客,博主写的很详细:http://blog.csdn.net/zhouzhoujianquan/article/details/53401506 除了一些说明,对方也提供了一些代码,大家可以拿来相互印证;

3)在AFNetworking中修改一个类: 
iOS开发 – 用AFNetworking实现https单向验证,双向验证 
找到这个文件,在里面增加一个方法:

 

再修改一个方法:

 

4)发起请求

 

 


到此,老版的AFNetworking请求https接口的双向验证就做完了,但是有一个问题,这里需要改动AFNetworking的代码,何况新的AFNetworking已经有了,为了保持代码的活力,老的应该摒弃的,而且更新pods后肯定替换的代码就没了,也是一个问题,不要急,下面来说说怎么用新的AFNetworking,并解决被pods更新替换代码的问题。

 

最后再说一点,使用老的AF来请求,只用到了client.p12文件,并没有用到server.cer,在新的里面是有用到的,猜测可能是客户端选择信任任何证书导致的,就变成了单向的验证。

Demo放在最后

2.来说说新的AFNetworking3.x怎么来实现的

1)倒入client.p12和server.cer文件 
2)plist内的设置,这是和上面一样的: 
iOS开发 – 用AFNetworking实现https单向验证,双向验证
各个项代表的含义请看这篇博客,博主写的很详细:http://blog.csdn.net/zhouzhoujianquan/article/details/53401506 除了一些说明,对方也提供了一些代码,大家可以拿来相互印证;

3)这里可不需要修改类里面的代码,但是这里需要重写一个方法:

 

关于这段代码,其实和老的AF里面修改的道理是一样的,可以看下这篇文章:http://www.jianshu.com/p/9e573607be13

4)发起请求

 

另外还要加上一个方法:

 

你会发现http://www.jianshu.com/p/9e573607be13 这里的代码有冗余,没错,我们是要封装一下,可是要怎么封装呢?博主尝试了集中都失败了,真是百思不得解,相信主动去封装的开发者也会碰到封装后请求失败的问题,也许你成功了,但是这里需要注意一个在block内使用变量的问题,具体的可以去看博主怎么封装的。

 


到这里,新的AF请求https就已经结束了,想看封装的,Demo放在最后。

 

3.单向验证 
说到这个,不得不说一下网上的很多方法,都把单向验证当作双向的,其实也是并不理解其原理,关于原理,请看这里 
代码实现AF都是一样的:

4.Demo下载福利

因为证书安全问题,Demo 里的证书博主删除了,请见谅,请大家放入自己的证书。 
老的AF访问httpsDemo

新的AF访问httpsDemo

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录