iOS AFN之https配置小结

写在前面

只是对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号,改成了不确定,给开发者更多的缓冲时间,到目前为止自签名证书都是可以的)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容