iOS適配https證書(shū)問(wèn)題(AFNetworking3.0為例)
眾所周知,蘋(píng)果有言,從2017年開(kāi)始,將屏蔽http的資源,強(qiáng)推https
樓主正好近日將http轉(zhuǎn)為https,給還沒(méi)動(dòng)手的朋友分享一二
1.準(zhǔn)備證書(shū)
首先找后臺(tái)要一個(gè)證書(shū)(SSL證書(shū),一般你跟后臺(tái)說(shuō)要弄https,然后讓他給你個(gè)證書(shū),他就知道了),我們需要的是.cer的證書(shū)。但是后臺(tái)可能給我們的是.crt的證書(shū)。我們需要轉(zhuǎn)換一下:打開(kāi)終端 -> cd到.crt證書(shū)路徑 -> 輸入openssl x509 -in 你的證書(shū).crt -out 你的證書(shū).cer -outform der,證書(shū)就準(zhǔn)備好了,拖入工程,記得選copy。
2.新建一個(gè)類(lèi)或者類(lèi)方法
以下代碼借鑒的,樓主自己是放在一個(gè)叫FactoryUI的類(lèi)中
//支持https + (AFSecurityPolicy *)customSecurityPolicy { //先導(dǎo)入證書(shū),找到證書(shū)的路徑 NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"你的證書(shū)名字" ofType:@"cer"]; NSData *certData = [NSData dataWithContentsOfFile:cerPath]; //AFSSLPinningModeCertificate 使用證書(shū)驗(yàn)證模式 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; //allowInvalidCertificates 是否允許無(wú)效證書(shū)(也就是自建的證書(shū)),默認(rèn)為NO //如果是需要驗(yàn)證自建證書(shū),需要設(shè)置為YES securityPolicy.allowInvalidCertificates = YES; //validatesDomainName 是否需要驗(yàn)證域名,默認(rèn)為YES; //假如證書(shū)的域名與你請(qǐng)求的域名不一致,需把該項(xiàng)設(shè)置為NO;如設(shè)成NO的話(huà),即服務(wù)器使用其他可信任機(jī)構(gòu)頒發(fā)的證書(shū),也可以建立連接,這個(gè)非常危險(xiǎn),建議打開(kāi)。 //置為NO,主要用于這種情況:客戶(hù)端請(qǐng)求的是子域名,而證書(shū)上的是另外一個(gè)域名。因?yàn)镾SL證書(shū)上的域名是獨(dú)立的,假如證書(shū)上注冊(cè)的域名是www.google.com,那么mail.google.com是無(wú)法驗(yàn)證通過(guò)的;當(dāng)然,有錢(qián)可以注冊(cè)通配符的域名*.google.com,但這個(gè)還是比較貴的。 //如置為NO,建議自己添加對(duì)應(yīng)域名的校驗(yàn)邏輯。 securityPolicy.validatesDomainName = NO; NSSet *set = [[NSSet alloc] initWithObjects:certData, nil]; securityPolicy.pinnedCertificates = set; return securityPolicy; }
3.修改AFNetWorking的請(qǐng)求(AFNetworking3.0為例)
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; manager.requestSerializer.timeoutInterval = 5.0; [manager setSecurityPolicy:[FactoryUI customSecurityPolicy]];//如2若提到的FactoryUI的類(lèi)方法
···后面的就還是一樣了
補(bǔ)充:App Transport Security Settings還是要設(shè)置
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS開(kāi)發(fā)TableView網(wǎng)絡(luò)請(qǐng)求及展示預(yù)加載實(shí)現(xiàn)示例
這篇文章主要為大家介紹了iOS開(kāi)發(fā)TableView網(wǎng)絡(luò)請(qǐng)求及展示預(yù)加載實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07詳解iOS App中UiTabBarController組件的基本用法
UiTabBarController組件即是用來(lái)創(chuàng)建App中的Tab視圖切換選項(xiàng)欄,下面將詳解iOS App中UiTabBarController組件的基本用法,包括左右滑動(dòng)切換標(biāo)簽頁(yè)等基本功能的實(shí)現(xiàn),需要的朋友可以參考下2016-05-05iOS 11更新后及iPhone X推出后工程中遇到的問(wèn)題及適配方法
這篇文章主要介紹了iOS 11更新后及iPhone X推出后工程中遇到的問(wèn)題及適配,需要的朋友可以參考下2017-10-10IOS 調(diào)整內(nèi)存中的圖片大小實(shí)例詳解
這篇文章主要介紹了IOS 調(diào)整內(nèi)存中的圖片大小實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04iOS實(shí)現(xiàn)一個(gè)簡(jiǎn)易日歷代碼
本篇文章主要介紹了iOS實(shí)現(xiàn)一個(gè)簡(jiǎn)易日歷代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03