利用AFNetworking最小代碼實現(xiàn)自簽CA證書的HTTPS

這里以向https://api.github.com發(fā)送請求為例绍在。

把自定義的CA證書放入工程:

Paste_Image.png

這里以HTTP代理工具Charles作為中間人來演示。關于該工具的使用方法, 本文暫不論述. 這里僅用它來展示自簽名證書的請求效果.

https://api.github.com網址的證書實際上是正規(guī)CADigiCert簽發(fā)的, 這里把Charles的CA根證書導入系統(tǒng)并設為信任后, 把Charles設為該網址的SSL Proxy (相當于"中間人"), 這樣通過代理訪問服務器返回將是由Charles偽CA簽發(fā)的證書.
本例假設 https://api.github.com的服務器證書是自簽的.

全部代碼如下:


    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //你請求的網絡服務返回的是JSON數(shù)據(jù)
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    
    //自定義security policy, 先前確保你的自定義CA證書已放入工程Bundle
    NSSet <NSData *> *cerSet = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]];
    AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet];
    policy.allowInvalidCertificates = YES;
    manager.securityPolicy = policy;

    //實際應用中把https://api.github.com換為你自己要訪問的網址
    [manager GET:@"https://api.github.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"responseObject:%@", responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error.localDesc:%@", error.localizedDescription);
        NSLog(@"%@", error);
    }];

打印返回的數(shù)據(jù)將如下一般:

Paste_Image.png

如果服務端使用的是正規(guī)CA簽發(fā)的證書, 那么以下幾行就可去掉:

NSSet <NSData *> *cerSet = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]]; 
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet]; 
policy.allowInvalidCertificates = YES; 
manager.securityPolicy = policy;

采用默認的defaultPolicy就可以了. AFN默認的securityPolicy就是它, 不必另寫代碼. AFSecurityPolicy類中會調用蘋果security.framework的機制去自行驗證本次請求服務端放回的證書是否是經過正規(guī)簽名.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖森瘪,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異票堵,居然都是意外死亡扼睬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門换衬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痰驱,“玉大人,你說我怎么就攤上這事瞳浦〉S常” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵叫潦,是天一觀的道長蝇完。 經常有香客問我,道長矗蕊,這世上最難降的妖魔是什么短蜕? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮傻咖,結果婚禮上朋魔,老公的妹妹穿的比我還像新娘。我一直安慰自己卿操,他們只是感情好警检,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著害淤,像睡著了一般扇雕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窥摄,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天镶奉,我揣著相機與錄音,去河邊找鬼。 笑死哨苛,一個胖子當著我的面吹牛鸽凶,可吹牛的內容都是我干的。 我是一名探鬼主播移国,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼吱瘩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迹缀?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蜜徽,失蹤者是張志新(化名)和其女友劉穎祝懂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拘鞋,經...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡砚蓬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盆色。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灰蛙。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖隔躲,靈堂內的尸體忽然破棺而出摩梧,到底是詐尸還是另有隱情,我是刑警寧澤宣旱,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布仅父,位于F島的核電站,受9級特大地震影響浑吟,放射性物質發(fā)生泄漏笙纤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一组力、第九天 我趴在偏房一處隱蔽的房頂上張望省容。 院中可真熱鬧,春花似錦燎字、人聲如沸腥椒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寞酿。三九已至,卻和暖如春脱柱,著一層夾襖步出監(jiān)牢的瞬間伐弹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惨好,地道東北人煌茴。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像日川,于是被迫代替她去往敵國和親蔓腐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內容