时间:2021-05-20
自从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];AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:certSet];// shareManager 是继承自AFHTTPSessionManager的一个类的实例对象sharedManager.securityPolicy = policy;这样在请求时,如果服务器要校验自签名证书就会调用AFSecurityPolicy类中以下方法
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domainAFNetworking就是在这个方法中进行的单向验证。如果有需要双向验证的也需要重写这个方法,以实现双向验证。(双向验证在银行类等app中使用的较多)
在该方法中使用自签名证书可能会出现的一个问题就是
复制代码 代码如下:
[pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)];
这行代码有可能数组中添加了nil,即自签名证书没有获取到。
解决方法:
其本质原因是后端的自签名证书需要进行base64反编码才能使用。
总结语:
通过对自签名证书这块的研究,对https有了更加深入、更深刻的认识,同时对AFNetworking中AFSecurityPolicy的源码进行了阅读和理解。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
详解IOS开发中生成推送的pem文件具体步骤如下:首先,需要一个pem的证书,该证书需要与开发时签名用的一致。具体生成pem证书方法如下:1.登录到iPhone
近日,网站HTTPS解决方案提供商安信证书上线了个人代码签名证书,基于来咨询相关证书的个人开发者用户量增多,安信特地挑选了一款合适的Comodo个人代码签名证书
SSL证书又叫https证书,是数字证书(数字证书包括SSL证书、客户端证书、代码签名证书等)的一种,因为配置在服务器上,故也称为服务器SSL证书。SSL证书就
在原生应用开发中,为了方便业务开发人员使用,我们一般会对网络库进行一些上传封装,而不是直接使用,例如基于AFNetworking库的iOS请求上层封装,Andr
IOS签名错误前日,Macbook的硬盘不幸挂了,于是将开发环境迁移到MacMini下。大家知道,对于Xcode来说,最麻烦的就是各种证书、Provisioni