没有合适的资源?快使用搜索试试~ 我知道了~
iOS 基于AFNetworking下自签名证书配置的方法
0 下载量 160 浏览量
2021-01-20
10:32:37
上传
评论
收藏 61KB PDF 举报
温馨提示
试读
1页
自从https推出以后,客户端对网络安全的要求程度也越来越高。甚至在iOS9之后,苹果强制要求必须支持https请求。 https是什么呢?它又是如何保证数据安全的呢? 简单来说,https就是http+TLS/SSL。就是在http上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,也就说传输中的数据都是加密的,如果不知道私钥,是无法真正知道传输内容的真正意思的。 整个https单向验证流程简单总结如下: 就是用户发起请求,服务器响应后返回一个证书,证书中包含一些基本信息和公钥。 用户拿到证书后,去验证这个证书是否合法,不合法,则请求终止。 合法则生
资源详情
资源评论
资源推荐
iOS 基于基于AFNetworking下自签名证书配置的方法下自签名证书配置的方法
自从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中使用的较多)
在该方法中使用自签名证书可能会出现的一个问题就是
代码如下:
[pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge
CFDataRef)certificateData)];
这行代码有可能数组中添加了nil,即自签名证书没有获取到。
解决方法:解决方法:
将后端发过来的.crt证书,修改后缀.cer,导入钥匙串。
再从钥匙串导出该证书,拉到项目里直接使用
其本质原因是后端的自签名证书需要进行base64反编码才能使用。
总结语:总结语:
通过对自签名证书这块的研究,对https有了更加深入、更深刻的认识,同时对AFNetworking中AFSecurityPolicy的源码进行了
阅读和理解。
您可能感兴趣的文章您可能感兴趣的文章:Android签名机制介绍:生成keystore、签名、查看签名信息等方法给Android的APK程序签名和重新签名
的方法android应用签名详细步骤Android获取apk程序签名信息代码示例Android APK使用Debug签名重新打包 Eclipse更改默
认Debug签名Android Apk去掉签名以及重新签名的方法iOS中的ipa重签名(逆向必备)iOS之Https自签名证书认证及数据请求的
封装原理IOS 签名错误codesign failed with exit code 1解决方法Android和iOS包批量重签名
weixin_38543749
- 粉丝: 1
- 资源: 929
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0