iOS AFN之https配置小結(jié)

寫(xiě)在前面

只是對(duì)AFN https配置一個(gè)簡(jiǎn)單的總結(jié)像棘,想深入研究的大咖义钉,請(qǐng)繞行哦??

正題

AFN https認(rèn)證主要的四個(gè)步驟:

步驟一:服務(wù)器cer證書(shū)導(dǎo)入Xcode項(xiàng)目

  • 獲得證書(shū)cer文件
    法一儡司,服務(wù)器那邊給(我們項(xiàng)目服務(wù)器給的cer文件,導(dǎo)入項(xiàng)目中出了點(diǎn)問(wèn)題余指,之后用的是自己在網(wǎng)站上導(dǎo)的)捕犬;
    法二,自己在網(wǎng)站導(dǎo)出(以下面12306網(wǎng)頁(yè)為例 https://kyfw.12306.cn/otn/lcxxcx/init
打開(kāi)上面給的12306鏈接酵镜,點(diǎn)擊https旁邊的三角感嘆號(hào)碉碉,依次如圖操作,則會(huì)出現(xiàn)下圖
按住箭頭所指圖片淮韭,拖拽到桌面垢粮,之后返回到桌面,會(huì)發(fā)現(xiàn)kyfw.12306.cn.cer文件
  • 導(dǎo)入到Xcode項(xiàng)目中
    add file添加到項(xiàng)目中靠粪,ok蜡吧。(這樣假如失敗的話(huà),可以嘗試導(dǎo)入證書(shū)之前占键,先雙擊證書(shū)添加到鑰匙串中昔善,之后允許,最后再導(dǎo)出畔乙,再重新導(dǎo)入到項(xiàng)目中)

步驟二:xcode info.list文件相關(guān)配置

主要是設(shè)置ATS開(kāi)關(guān)和白名單(因?yàn)槭亲院灻淖C書(shū)君仆,必須要添加白名單,即自己服務(wù)器的域名牲距,否則無(wú)法訪(fǎng)問(wèn))袖订。


notice:圖中ATS下面的Allow Arbitrary Loads 若設(shè)置成YES的話(huà),則app允許http訪(fǎng)問(wèn)嗅虏,其實(shí)這樣繞過(guò)了https,但是這種情況確實(shí)非常不安全上沐,后面可以看到Charles一抓包皮服,數(shù)據(jù)全都能看的見(jiàn)。

步驟三:AFN程序代碼相關(guān)配置

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抓包驗(yàn)證

  • 首先檢測(cè),google瀏覽器請(qǐng)求龄广,Charles抓包是否成功硫眯,若失敗,解決方法如下(cmd+, 快捷鍵進(jìn)入瀏覽器設(shè)置界面)
點(diǎn)擊顯示高級(jí)設(shè)置
依次找到網(wǎng)路择同,點(diǎn)擊更改代理服務(wù)器設(shè)置
把圖中箭頭所指向的勾選去掉两入,點(diǎn)擊好,最后要應(yīng)用成功

之后瀏覽器刷新一個(gè)頁(yè)面敲才,會(huì)發(fā)現(xiàn)Charles此時(shí)就會(huì)抓到內(nèi)容了裹纳。

成功抓取簡(jiǎn)書(shū)某個(gè)頁(yè)面的數(shù)據(jù)
  • 在模擬器運(yùn)行你的項(xiàng)目,發(fā)現(xiàn)contents都是亂碼等紧武,表示成功
  • 真機(jī)運(yùn)行項(xiàng)目
    確保iOS設(shè)備跟mac在同一網(wǎng)段(用同一個(gè)wifi就ok)剃氧;
    點(diǎn)擊iOS設(shè)備網(wǎng)絡(luò)詳情,找到HTTP代理阻星,選擇手動(dòng)朋鞍,服務(wù)器填寫(xiě)你mac的IP,端口填8888妥箕,配置完成滥酥。
就是紅框里面的

額外知識(shí)點(diǎn)補(bǔ)充

  • AFN設(shè)置自定義User-Agent(具體應(yīng)用場(chǎng)景相應(yīng)修改)
    AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
    //設(shè)置自定義代理參數(shù)
    [session.requestSerializer setValue:[self setUserAgent] forHTTPHeaderField:@"User-Agent"];

#pragma -mark User-Agent添加參數(shù)
- (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) {
        //有這個(gè)字符串
    }else{
        //沒(méi)有的話(huà)追加
        [newAgent appendFormat:@"%@%@", @" Helloan_IOS_APP/",version_current];
    }
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newAgent, @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    
    return newAgent;
}```

* AFN 頭像上傳 客戶(hù)端接收失敗問(wèn)題(接收格式設(shè)置)

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];```

補(bǔ)充

  • Allow Arbitrary Loads 這個(gè)設(shè)置成NO的情況下畦幢,域名假如是test.helloan.cn坎吻,此時(shí)沒(méi)有被假如白名單。
    測(cè)試中會(huì)發(fā)現(xiàn)呛讲,ios9 webview加載空白禾怠,而ios8.3是可以正常加載的。
  • 如何添加白名單(Exception Domain指的就是白名單)
Paste_Image.png
  • sdwebimage請(qǐng)求圖片https設(shè)置(options:SDWebImageAllowInvalidSSLCertificates)
 [self.ivHeadPortrait sd_setImageWithURL:[NSURL URLWithString:urlStringHead]
                               placeholderImage:[UIImage imageNamed:@"portraitDefault"] options:SDWebImageAllowInvalidSSLCertificates];
  • iOS webview/wkwebview不要求配置https贝搁,http請(qǐng)求也是行的

待確定問(wèn)題

  • 不知道自簽名證書(shū)吗氏,蘋(píng)果那邊認(rèn)不認(rèn),這個(gè)只能等17年1月1號(hào) 以后上傳新版本知曉雷逆,到時(shí)再更新??
    (蘋(píng)果對(duì)https要求又放開(kāi)了弦讽,由之前的1月1號(hào),改成了不確定膀哲,給開(kāi)發(fā)者更多的緩沖時(shí)間往产,到目前為止自簽名證書(shū)都是可以的)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市某宪,隨后出現(xiàn)的幾起案子仿村,更是在濱河造成了極大的恐慌,老刑警劉巖兴喂,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔼囊,死亡現(xiàn)場(chǎng)離奇詭異焚志,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)畏鼓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)酱酬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人云矫,你說(shuō)我怎么就攤上這事膳沽。” “怎么了让禀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵挑社,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我堆缘,道長(zhǎng)滔灶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任吼肥,我火速辦了婚禮录平,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缀皱。我一直安慰自己斗这,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布啤斗。 她就那樣靜靜地躺著表箭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钮莲。 梳的紋絲不亂的頭發(fā)上免钻,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音崔拥,去河邊找鬼极舔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛链瓦,可吹牛的內(nèi)容都是我干的拆魏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慈俯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渤刃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起贴膘,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤卖子,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后刑峡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體揪胃,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡璃哟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喊递。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阳似,死狀恐怖骚勘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撮奏,我是刑警寧澤俏讹,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站畜吊,受9級(jí)特大地震影響泽疆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玲献,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一殉疼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捌年,春花似錦瓢娜、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至托酸,卻和暖如春褒颈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背励堡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工谷丸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人念秧。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓淤井,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親摊趾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子币狠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容