iOS AFNetworking HTTP轉(zhuǎn)HTTPS適配

在WWDC 2016開(kāi)發(fā)者大會(huì)上黔姜,蘋(píng)果宣布了一個(gè)最后期限:到2017年1月1日 App Store中的所有應(yīng)用都必須啟用 App Transport Security安全功能。也就是說(shuō)管怠,自2017年起葡缰,網(wǎng)絡(luò)請(qǐng)求必須由http改成https亏掀。

今天后臺(tái)自己配置了一個(gè)免費(fèi)https證書(shū),我直接將項(xiàng)目中的域名的http 改成https 結(jié)果報(bào)錯(cuò):

 failure................failure ....... error: Error Domain=NSURLErrorDomain Code=-1202 "****此服務(wù)器的證書(shū)無(wú)效。您可能正在連接到一個(gè)偽裝成****“.com”****的服務(wù)器泛释,這會(huì)威脅到您的機(jī)密信息的安全滤愕。****" UserInfo={NSURLErrorFailingURLPeerTrustErrorKey=, NSLocalizedRecoverySuggestion=****您仍要連接此服務(wù)器嗎?****, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9807, NSErrorPeerCertificateChainKey=(**
**"",**
**""**
**), 
NSUnderlyingError=0x608000242340 {Error Domain=kCFErrorDomainCFNetwork Code=-1202 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=, _kCFNetworkCFStreamSSLErrorOriginalValue=-9807, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9807, kCFStreamPropertySSLPeerCertificates=(**
**"",**
**""**
**)}}, NSLocalizedDescription=****此服務(wù)器的證書(shū)無(wú)效怜校。您可能正在連接到一個(gè)偽裝成****“”****的服務(wù)器间影,這會(huì)威脅到您的機(jī)密信息的安全。****, NSErrorFailingURLKey=..,**
**NSErrorFailingURLStringKey=.., NSErrorClientCertificateStateKey=0}**

在網(wǎng)上查了一些資料 做一點(diǎn)筆記
參考:iOS開(kāi)發(fā):對(duì)于AFNetworking HTTP轉(zhuǎn)HTTPS請(qǐng)求證書(shū)問(wèn)題
詳細(xì)的證書(shū)介紹:iOS開(kāi)發(fā):對(duì)于AFNetworking HTTP轉(zhuǎn)HTTPS請(qǐng)求證書(shū)問(wèn)題
HTTPS服務(wù)器滿(mǎn)足ATS默認(rèn)的條件茄茁,而且SSL證書(shū)是通過(guò)權(quán)威的CA機(jī)構(gòu)認(rèn)證過(guò)的魂贬,那么我們?cè)谑褂肵code開(kāi)發(fā)的時(shí)候,對(duì)網(wǎng)絡(luò)的適配什么都不用做裙顽,我們也能正常與服務(wù)器通信付燥。但是,當(dāng)我們對(duì)安全性有更高的要求時(shí)或者我們自建證書(shū)時(shí)愈犹,我們需要本地導(dǎo)入證書(shū)來(lái)進(jìn)行驗(yàn)證键科。
使用AFNetworking來(lái)支持https
步驟:
1.從后臺(tái)那里拿到一個(gè).crt后綴的證書(shū)文件,把這個(gè)文件變成.cer后綴的文件漩怎,打開(kāi)你的終端勋颖,寫(xiě)下面的命令:
openssl x509 -in 后臺(tái)給的名字.cet -out 你想要的名字.cer -outform der

2.將生成的cer文件導(dǎo)入到工程中 在封裝的AFN請(qǐng)求基類(lèi)中介入以下代碼:

//https證書(shū)
+ (AFSecurityPolicy *)customSecurityPolicy
{
    //先導(dǎo)入證書(shū),找到證書(shū)的路徑
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"www.mxingm.com" 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;
} 

然后在AFN請(qǐng)求的方法中加上:

+ (void)executeRequestAndIsPost:(NSString *)urlString
               parameters:(id)parameters
                  success:(SuccessBlock)successBlock
                  failure:(FailureBlock)failureBlock
{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer.timeoutInterval = outTime;
    //HTTPS SSL的驗(yàn)證勋磕,在此處調(diào)用上面的代碼,給這個(gè)證書(shū)驗(yàn)證敢靡;
    [manager setSecurityPolicy:[SYNetworkingManager customSecurityPolicy]];
    [manager POST:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (successBlock) {
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
            successBlock(dic);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failureBlock) {
            failureBlock(error);
            NSLog(@"網(wǎng)絡(luò)異常 - T_T%@", error);
        }
    }];
}

加完以后再次請(qǐng)求 發(fā)現(xiàn)可以建立連接了挂滓。

當(dāng)我們的工程中有SDWebImage框架的請(qǐng)求HTTPS的圖片時(shí),大家可以繞過(guò)證書(shū)驗(yàn)證去加載圖片

[imageView sd_setImageWithURL:[NSURL URLWithString:urlString] placeholderImage:self.placeholder options:SDWebImageAllowInvalidSSLCertificates];

這就是AFN升級(jí)HTTPS的一些總結(jié) 覺(jué)得有幫助的參考和總結(jié).希望幫到你:-D

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啸胧,隨后出現(xiàn)的幾起案子赶站,更是在濱河造成了極大的恐慌,老刑警劉巖吓揪,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亲怠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡柠辞,警方通過(guò)查閱死者的電腦和手機(jī)团秽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叭首,“玉大人习勤,你說(shuō)我怎么就攤上這事”焊瘢” “怎么了图毕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)眷唉。 經(jīng)常有香客問(wèn)我予颤,道長(zhǎng),這世上最難降的妖魔是什么冬阳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任蛤虐,我火速辦了婚禮,結(jié)果婚禮上肝陪,老公的妹妹穿的比我還像新娘驳庭。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布饲常。 她就那樣靜靜地躺著蹲堂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贝淤。 梳的紋絲不亂的頭發(fā)上柒竞,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音霹娄,去河邊找鬼能犯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛犬耻,可吹牛的內(nèi)容都是我干的踩晶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼枕磁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渡蜻!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起计济,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茸苇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后沦寂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體学密,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年传藏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腻暮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毯侦,死狀恐怖哭靖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侈离,我是刑警寧澤试幽,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站卦碾,受9級(jí)特大地震影響铺坞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洲胖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一康震、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宾濒,春花似錦、人聲如沸屏箍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至卸奉,卻和暖如春钝诚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榄棵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工凝颇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疹鳄。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓拧略,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瘪弓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垫蛆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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