马鞍山贴吧,猪头军师114,寻仙东山岛破阵
自从https推出以后,客户端对网络安全的要求程度也越来越高。甚至在ios9之后,苹果强制要求必须支持https请求。
https是什么呢?它又是如何保证数据安全的呢?
简单来说,https就是http+tls/ssl。就是在http上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过tls进行加密,也就说传输中的数据都是加密的,如果不知道私钥,是无法真正知道传输内容的真正意思的。
整个https单向验证流程简单总结如下:
当然这仅仅是一个单向认证,https还会有双向认证,相对于单向认证也很简单。仅仅多了服务端验证客户端这一步。
那么在afnetworking中,我们要完成自签名证书配置:
// 自签名证书在路径 nsstring *certfilepath = [[nsbundle mainbundle] pathforresource:@"service" oftype:@"cer"]; // 自签名证书转换成二进制数据 nsdata *certdata = [nsdata datawithcontentsoffile:certfilepath]; // 将二进制数据放到nsset中 nsset *certset = [nsset setwithobject:certdata]; /* afnetworking中的afsecuritypolicy实例化方法 第一个参数: afsslpinningmodenone, //不验证 afsslpinningmodepublickey, //只验证公钥 afsslpinningmodecertificate, //验证证书 第二个参数:存放二进制证书数据的nsset */ afsecuritypolicy *policy = [afsecuritypolicy policywithpinningmode:afsslpinningmodecertificate withpinnedcertificates:certset]; // sharemanager 是继承自afhttpsessionmanager的一个类的实例对象 sharedmanager.securitypolicy = policy;
这样在请求时,如果服务器要校验自签名证书就会调用afsecuritypolicy类中以下方法
- (bool)evaluateservertrust:(sectrustref)servertrust fordomain:(nsstring *)domain
afnetworking就是在这个方法中进行的单向验证。如果有需要双向验证的也需要重写这个方法,以实现双向验证。(双向验证在银行类等app中使用的较多)
在该方法中使用自签名证书可能会出现的一个问题就是
这行代码有可能数组中添加了nil,即自签名证书没有获取到。
解决方法:
其本质原因是后端的自签名证书需要进行base64反编码才能使用。
总结语:
通过对自签名证书这块的研究,对https有了更加深入、更深刻的认识,同时对afnetworking中afsecuritypolicy的源码进行了阅读和理解。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
iOS 使用UITextField自定义搜索框 实现用户输入完之后“实时搜索”功能
网友评论