[无限互联]afnetworking源码之afsecuritypolicy模块

[无限互联]afnetworking源码之afsecuritypolicy模块

ID:33483756

大小:226.00 KB

页数:11页

时间:2019-02-26

[无限互联]afnetworking源码之afsecuritypolicy模块_第1页
[无限互联]afnetworking源码之afsecuritypolicy模块_第2页
[无限互联]afnetworking源码之afsecuritypolicy模块_第3页
[无限互联]afnetworking源码之afsecuritypolicy模块_第4页
[无限互联]afnetworking源码之afsecuritypolicy模块_第5页
资源描述:

《[无限互联]afnetworking源码之afsecuritypolicy模块》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、curityPolicy分三种验证模式:AFSSLPinningModeNone这个模式表示不做SSLpinning,只跟浏览器一样在系统的信任机构列表里验证服务端返回的证书。若证书是信任机构签发的就会通过,若是自己服务器生成的证书,这里是不会通过的。AFSSLPinningModeCertificate这个模式表示用证书绑定方式验证证书,需要客户端保存有服务端的证书拷贝,这里验证分两步,第一步验证证书的域名/有效期等信息,第二步是对比服务端返回的证书跟客户端返回的是否一致。这里还没弄明白第一步的验证是怎么进行的,代码上跟去系统信任机构列表里验证一样调用了Sec

3、TrustEvaluate,只是这里的列表换成了客户端保存的那些证书列表。若要验证这个,是否应该把服务端证书的颁发机构根证书也放到客户端里?AFSSLPinningModePublicKey这个模式同样是用证书绑定方式验证,客户端要有服务端的证书拷贝,只是验证时只验证证书里的公钥,不验证证书的有效期等信息。只要公钥是正确的,就能保证通信不会被窃听,因为中间人没有私钥,无法解开通过公钥加密的数据。详情请见代码:[objc] viewplaincopy1.#import "AFSecurityPolicy.h"  2.  3.// Equivalent of mac

4、ro in , without causing compiler warning:  4.// "'DebugAssert' is deprecated: first deprecated in OS X 10.8"  5.//这两个宏方法用于方便地处理调用各种证书方法过程中出现的错误,出现错误后用goto语句直接跳转到结束语  6.//关于为什么要用 __builtin_expect (x, 0) 而不直接用 x != 0,是为了CPU执行时的性能优化,见这里:  7.//http://stackoverflow.com/que

5、stions/7346929/why-do-we-use-builtin-expect-when-a-straightforward-way-is-to-use-if-else  8.#ifndef AF_Require_noErr  9.       #define AF_Require_noErr(errorCode, exceptionLabel)                          10.          do {                                                              

6、        11.              if (__builtin_expect(0 != (errorCode), 0)) {                          12.                  goto exceptionLabel;                                              13.              }                                                                     14.        

7、  } while (0)  1.#endif  2.  3.#if !defined(__IPHONE_OS_VERSION_MIN_REQUIRED)  4.static NSData * AFSecKeyGetData(SecKeyRef key) {  5.    CFDataRef data = NULL;  6.  7.    AF_Require_noErr(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out);  8.  9.    return 

8、(__bridge_tr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。