iOS 支持Https 請求

因為2017年開始逸雹,蘋果官方要求必須支持Https,ATS允許http加載 策略將被關(guān)閉筷转。所以最近許多小伙伴應(yīng)該都在為適配而忙著搜集資料筐喳。最開始看一些關(guān)于證書的東西催式,自己也是一臉懵逼”芄椋看了好幾遍荣月,才大致懂了一點點。自己還去創(chuàng)建了證書梳毙,搭建了tomcat進行調(diào)試哺窄。雖然忙了半天效果不顯著,但是略有收獲账锹,會進行tomcat簡單配置環(huán)境了(竊喜:只要有進步都是好的)萌业。不扯了,進入正題奸柬。
  首先生年,一般小伙伴剛看到要適配的時候,一般會去查證書相關(guān)信息廓奕,其實先不用管證書問題抱婉,等后臺配置好了,給你個證書就行了(我可沒有甩鍋給后臺懂从,主要自己要先把客戶端配置好授段,聯(lián)調(diào)最主要,也耗費時間番甩,有時間了再詳細了解證書)。
  第一種最簡單方式届搁,后臺配置完成后缘薛,客戶端直接把請求改為https窍育,ATS中Allow Arbitrary Loads改為NO,一行代碼沒有修改,驚奇的發(fā)現(xiàn)宴胧,居然可以請求了漱抓。是不是很竊喜,暗自感嘆So easy! 小伙子高興的太早了恕齐。這種方式我理解為掛著https的旗幟乞娄,實際還是http。別人還是可以隨意的看你請求數(shù)據(jù)和返回數(shù)據(jù)显歧∫腔颍可能有的小伙伴這時候有疑問了,用charles抓包時候發(fā)現(xiàn)士骤,是沒辦法抓到數(shù)據(jù)范删,顯示的是unkown,看返回數(shù)據(jù)是亂碼,猿(樓主)又在瞎說了。

抓取https請求.png

這是因為你沒有啟用SSL 代理拷肌。右擊你的請求url到旦,就會彈出選擇框,點擊Enable SSL Proxying巨缘。

開啟SSL代理.png

至于這塊charles的配置添忘,在此我就不詳細解釋了,有時間了再補充一下若锁。自己查詢一下資料,主要就是手機添加charles ssl證書搁骑,然后就可以看到跟請求http 一樣可以抓取數(shù)據(jù)了,所以樓主說只是掛了https 的牌子拴清,沒有做具體的事情靶病。至于蘋果是否能夠?qū)徍送ㄟ^,我也就不清楚了口予,反正樓主不當?shù)谝粋€吃螃蟹的人(因為程序員要降低被拒風險)娄周。
  第二種方式,腳踏實地沪停,一步一個腳印煤辨。先上代碼:

+ (AFSecurityPolicy*)customSecurityPolicy
{
    //先導(dǎo)入證書
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:certificate ofType:@"cer"];//證書的路徑
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    // AFSSLPinningModeCertificate 使用證書驗證模式
    //AFSSLPinningModeNone: 代表客戶端無條件地信任服務(wù)器端返回的證書。
    //AFSSLPinningModePublicKey: 代表客戶端會將服務(wù)器端返回的證書與本地保存的證書中木张,PublicKey的部分進行校驗众辨;如果正確,才繼續(xù)進行舷礼。
    //AFSSLPinningModeCertificate: 代表客戶端會將服務(wù)器端返回的證書和本地保存的證書中的所有內(nèi)容鹃彻,包括PublicKey和證書部分,全部進行校驗妻献;如果正確蛛株,才繼續(xù)進行团赁。
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    // allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認為NO
    // 如果是需要驗證自建證書谨履,需要設(shè)置為YES
    securityPolicy.allowInvalidCertificates = YES;
    //validatesDomainName 是否需要驗證域名欢摄,默認為YES;
    //假如證書的域名與你請求的域名不一致笋粟,需把該項設(shè)置為NO怀挠;如設(shè)成NO的話,即服務(wù)器使用其他可信任機構(gòu)頒發(fā)的證書害捕,也可以建立連接绿淋,這個非常危險,建議打開吨艇。
    //置為NO躬它,主要用于這種情況:客戶端請求的是子域名,而證書上的是另外一個域名东涡。因為SSL證書上的域名是獨立的冯吓,假如證書上注冊的域名是www.google.com,那么mail.google.com是無法驗證通過的疮跑;當然组贺,有錢可以注冊通配符的域名*.google.com,但這個還是比較貴的祖娘。
    //如置為NO,建議自己添加對應(yīng)域名的校驗邏輯渐苏。
    //對應(yīng)域名的校驗我認為應(yīng)該在url中去邏輯判斷。--》馮龍騰寫
    securityPolicy.validatesDomainName = NO;
    if (certData) {
        securityPolicy.pinnedCertificates = [NSSet setWithObjects:certData, nil];
    }
    return securityPolicy;
}

這部分代碼是配置驗證策略琼富,摘自馮龍騰(雖然不知道哪位大神,還是要謝謝這么詳細的注釋鞠眉。)然后把返回的securityPolicy賦值給AFHTTPSessionManager的securityPolicy屬性。有時間的朋友出皇,可以看看AFN源碼了解一下底層驗證策略哗戈。其實第一種方式郊艘,只添加了https請求,然后什么代碼也沒添加的方式步做,采取的是AFN 默認驗證策略

[AFSecurityPolicy defaultPolicy];

所以不用驚訝為啥能走的通副渴,只不過采取的驗證方式不同奈附。這時候就可以跟后臺要證書煮剧,進行聯(lián)調(diào)了。
  一般只要證書沒有問題勉盅,并且后臺支持了https,走通網(wǎng)絡(luò)請求挑胸,應(yīng)該問題不大。最開始我們使用的是自建證書茬贵,后臺使用keytool生成證書,當時前端和后臺使用的是同一個證書解藻,看AFN源碼過程中,發(fā)現(xiàn)驗證過程如果證書一致螟左,也是可以正常請求的觅够。但是不是CA證書,繼續(xù)改進喘先,使用openssl創(chuàng)建了自建的CA證書。自建CA證書和授權(quán)CA證書苹祟,最大的區(qū)別,也是最簡單的區(qū)別树枫,就是你用瀏覽器訪問時候,自建證書會顯示不是私密鏈接奔誓,點擊高級,繼續(xù)進行訪問厨喂,提示你不安全信息。

12306官網(wǎng).png

而授權(quán)CA證書蜕煌,則可以直接正常訪問

百度.png

使用自建證書的時候斜纪,允許使用自建證書設(shè)置為YES,

securityPolicy.allowInvalidCertificates = YES;
AFSecurityPolicy  *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];

當時這種情況我是沒有走通的,難道是沒有授權(quán)允許繼續(xù)訪問按鈕盒刚?這就尷尬了,沒太多的時間去管這個了因块,跟后臺大哥說,咱還是用授權(quán)的CA證書吧趾断,后臺大哥說吓懈,授權(quán)CA證書得money啊,一臉的不情愿耻警,好在一不小心看到阿里有個可以申請免費的CA證書,當時我是淚流滿面甘穿。證書搞定,然后聯(lián)調(diào)一切正常秸滴。
  這還沒完募判,要記得把自己用的第三方荡含,友盟統(tǒng)計届垫,shareSDK,推送误债,熱部署JSPatch等等,更新到支持Https寝蹈,如果有不支持https 請求的李命,要加入白名單(不知道蘋果審核允許不允許箫老,但是目前沒想到好的方式)。還有網(wǎng)頁請求周叮,也要注意一下界斜。配置結(jié)束以后,用charles 抓包各薇,查看一下有沒有請求失敗的,如果有峭判,核查哪一部分的問題棕叫。

Paste_Image.png

  最后提醒一下,授權(quán)證書是有過期時間的俺泣,要做好更新證書策略,策略問題横漏,目前我們已經(jīng)處理完了,每個公司不同缎浇,自己可以想一個比較完善的策略赴肚。希望大家的APP能夠順利上架。如果有理解不對的地方誉券,請指出,不斷學(xué)習(xí)進步的小碼農(nóng)横朋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晰甚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蓖捶,老刑警劉巖扁远,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異并闲,居然都是意外死亡,警方通過查閱死者的電腦和手機帝火,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門湃缎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人九巡,你說我怎么就攤上這事蹂季。” “怎么了乏盐?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵父能,是天一觀的道長。 經(jīng)常有香客問我何吝,道長,這世上最難降的妖魔是什么爱榕? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任黔酥,我火速辦了婚禮洪橘,結(jié)果婚禮上棵帽,老公的妹妹穿的比我還像新娘。我一直安慰自己逗概,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布卿城。 她就那樣靜靜地躺著铅搓,像睡著了一般狸吞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蹋偏,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天威始,我揣著相機與錄音像街,去河邊找鬼。 笑死镰绎,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的随静。 我是一名探鬼主播吗讶,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼重绷!你這毒婦竟也來了膜毁?” 一聲冷哼從身側(cè)響起愤钾,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤能颁,失蹤者是張志新(化名)和其女友劉穎火焰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昌简,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡纯赎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了犬金。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖该默,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匣摘,我是刑警寧澤裹刮,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布捧弃,位于F島的核電站,受9級特大地震影響塔橡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜户辞,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一底燎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枢希,春花似錦朱沃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽失暴。三九已至,卻和暖如春古戴,著一層夾襖步出監(jiān)牢的瞬間矩肩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留建炫,地道東北人肛跌。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓衍慎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稳捆。 傳聞我的和親對象是個殘疾皇子麦轰,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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