iOS AFN之https配置小结

作者: 凉风起君子意如何 | 来源:发表于2016-12-21 18:24 被阅读4521次

写在前面

只是对AFN https配置一个简单的总结,想深入研究的大咖,请绕行哦😝

正题

AFN https认证主要的四个步骤:

步骤一:服务器cer证书导入Xcode项目

  • 获得证书cer文件
    法一,服务器那边给(我们项目服务器给的cer文件,导入项目中出了点问题,之后用的是自己在网站上导的);
    法二,自己在网站导出(以下面12306网页为例 https://kyfw.12306.cn/otn/lcxxcx/init
打开上面给的12306链接,点击https旁边的三角感叹号,依次如图操作,则会出现下图 按住箭头所指图片,拖拽到桌面,之后返回到桌面,会发现kyfw.12306.cn.cer文件
  • 导入到Xcode项目中
    add file添加到项目中,ok。(这样假如失败的话,可以尝试导入证书之前,先双击证书添加到钥匙串中,之后允许,最后再导出,再重新导入到项目中)

步骤二:xcode info.list文件相关配置

主要是设置ATS开关和白名单(因为是自签名的证书,必须要添加白名单,即自己服务器的域名,否则无法访问)。


notice:图中ATS下面的Allow Arbitrary Loads 若设置成YES的话,则app允许http访问,其实这样绕过了https,但是这种情况确实非常不安全,后面可以看到Charles一抓包,数据全都能看的见。

步骤三:AFN程序代码相关配置

AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
    //配置https
    session.securityPolicy = [self customSecurityPolicy];
    session.securityPolicy.allowInvalidCertificates = YES;

#pragma mark- 配置https
- (AFSecurityPolicy *)customSecurityPolicy
{
    /** https */
    NSString*cerPath = [[NSBundle mainBundle] pathForResource:@"kyfw.12306.cn.cer"ofType:nil];
    NSData*cerData = [NSData dataWithContentsOfFile:cerPath];
    NSSet*set = [[NSSet alloc] initWithObjects:cerData,nil];
    AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:set];
    return policy;
}

步骤四:Charles抓包验证

  • 首先检测,google浏览器请求,Charles抓包是否成功,若失败,解决方法如下(cmd+, 快捷键进入浏览器设置界面)
点击显示高级设置 依次找到网路,点击更改代理服务器设置 把图中箭头所指向的勾选去掉,点击好,最后要应用成功

之后浏览器刷新一个页面,会发现Charles此时就会抓到内容了。

成功抓取简书某个页面的数据
  • 在模拟器运行你的项目,发现contents都是乱码等,表示成功
  • 真机运行项目
    确保iOS设备跟mac在同一网段(用同一个wifi就ok);
    点击iOS设备网络详情,找到HTTP代理,选择手动,服务器填写你mac的IP,端口填8888,配置完成。
就是红框里面的

额外知识点补充

  • AFN设置自定义User-Agent(具体应用场景相应修改)
    AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
    //设置自定义代理参数
    [session.requestSerializer setValue:[self setUserAgent] forHTTPHeaderField:@"User-Agent"];

#pragma -mark User-Agent添加参数
- (NSString *)setUserAgent{
    UIWebView *webView = [[UIWebView alloc] init];
    NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    
    NSString *version_current = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    NSMutableString *newAgent = [NSMutableString stringWithString:userAgent];
    //查找Helloan_IOS_APP字符串
    NSRange substr = [newAgent rangeOfString:@"Helloan_IOS_APP"];
    if (substr.location != NSNotFound) {
        //有这个字符串
    }else{
        //没有的话追加
        [newAgent appendFormat:@"%@%@", @" Helloan_IOS_APP/",version_current];
    }
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newAgent, @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    
    return newAgent;
}```

* AFN 头像上传 客户端接收失败问题(接收格式设置)

AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
session.responseSerializer = [AFJSONResponseSerializer serializer];
//acceptableContentTypes 配置很重要,否则上传失败
session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"multipart/form-data",@"text/plain", nil];```

补充

  • Allow Arbitrary Loads 这个设置成NO的情况下,域名假如是test.helloan.cn,此时没有被假如白名单。
    测试中会发现,ios9 webview加载空白,而ios8.3是可以正常加载的。
  • 如何添加白名单(Exception Domain指的就是白名单)
Paste_Image.png
  • sdwebimage请求图片https设置(options:SDWebImageAllowInvalidSSLCertificates)
 [self.ivHeadPortrait sd_setImageWithURL:[NSURL URLWithString:urlStringHead]
                               placeholderImage:[UIImage imageNamed:@"portraitDefault"] options:SDWebImageAllowInvalidSSLCertificates];
  • iOS webview/wkwebview不要求配置https,http请求也是行的

待确定问题

  • 不知道自签名证书,苹果那边认不认,这个只能等17年1月1号 以后上传新版本知晓,到时再更新😀
    (苹果对https要求又放开了,由之前的1月1号,改成了不确定,给开发者更多的缓冲时间,到目前为止自签名证书都是可以的)

相关文章

  • iOS AFN之https配置小结

    写在前面 只是对AFN https配置一个简单的总结,想深入研究的大咖,请绕行哦? 为什么配置https?苹果要求...

  • iOS开发 AFN配置https请求

    iOS开发 AFN配置https请求

  • iOS配置HTTPS(AFN)

    费话不说,直接代码: Info.plist中修改:NSAllowsArbitraryLoads为true

  • iOS-AFN

    博文参考iOS开发之网络层探索iOS安全策略之HTTPS Github Demo AFN头文件信息

  • iOS HTTPS SSL

    iOS https 目前iOS大都是用的AFN来进行数据请求 正常请求 配置 逻辑处理 主要使用是在 AFUR...

  • iOS开发AFN配置HTTPS的SSL证书

    原定于2017年1月1日起所有提交到 App Store 的App必须强制开启 ATS,需要配置Https。但是现...

  • IOS AFN一套操作网络的第三方框架

    AFN框架的特点: NSURLConnection iOS2.0之后就有 NSURLSession iOS7.0之...

  • iOS中AFN表单提交

    文章首次整理发布个人博客一之笔:iOS中AFN表单提交 AFN 几乎可以成为iOS开发,网络请求的终结者了,极大的...

  • ios中用AFN做https

    原文地址 http://blog.csdn.net/u012409247/article/details/4985...

  • iOS之https的配置

    笔者自语:令人头疼的https配置终于告一段落,回顾之前的遇到各种没有概念的问题,是一个即心酸有蛋疼的过程。终于有...

网友评论

  • Ape_HC:配置证书后, 网络请求应该是没问题, 但是想问一下我用AVPlayer播放https的视频时, 配置的证书有效果吗, 或者我这样问, 想用AvPlayer播放https的视频需要做哪些设置
    凉风起君子意如何:@Ape_HC AVPlayer播放具体不是很清楚,我这是针对AFNetworking的一些配置
  • 烽火骑士:AFN -26275错误是什么原因呢?
    凉风起君子意如何:@烽火骑士 应该还是跟哪里配置不对有关,具体的不是很清楚,我们这边配置过程倒没出现这个错误。你那边解决了可以告知下,一并写上,借鉴学习下
  • _君莫笑_:验证过没过啊说一下
    凉风起君子意如何:@JustinKoala 可以
  • 羽之_HB:你好请问配置域名白名单怎吗添加
    羽之_HB:@春夏雨雪 非常感谢,我去试试
    凉风起君子意如何:把www.baidu.com 改成你自己的域名就行了
    凉风起君子意如何:<key>NSAppTransportSecurity</key>
    <dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
    <key>www.baidu.com</key>
    <dict>
    <key>NSExceptionAllowsInsecureHTTPLoads</key>
    <true/>
    </dict>

本文标题:iOS AFN之https配置小结

本文链接:https://www.haomeiwen.com/subject/fdeqvttx.html