国产亚洲欧美人成在线,免费视频爱爱太爽了无码,日本免费一区二区三区高清视频 ,国产真实伦对白精彩视频

歡迎您光臨深圳塔燈網(wǎng)絡(luò)科技有限公司!
電話圖標(biāo) 余先生:13699882642

網(wǎng)站百科

為您解碼網(wǎng)站建設(shè)的點點滴滴

iOS 10 中使用HTTPS

發(fā)表日期:2016-12 文章編輯:小燈 瀏覽次數(shù):2640

由于蘋果規(guī)定2017年1月1日以后,所有APP都要使用HTTPS進行網(wǎng)絡(luò)請求,否則無法上架,因此研究了一下在iOS中使用HTTPS請求的實現(xiàn)。網(wǎng)上搜索了一些比較有用資料,大家可以參考下

蘋果強制升級的HTTPS不僅僅是在接口HTTP上加個S那么簡單:
它所有滿足的是iOS9中新增App Transport Security(簡稱ATS)特性:
那滿足ATS我們需要做什么呢
1.必須是蘋果信任的CA證書機構(gòu)頒發(fā)的證書
2.后臺傳輸協(xié)議必須滿足: TLS1.2 (這很重要, 后面的自制證書滿足這個條件是前提)
3.簽字算法只能是下面的一種:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
4.證書必須使用SHA256或者更好的哈希算法進行簽名,要么是2048位或者更長的RSA密鑰,要么就是256位或更長的ECC密鑰。
目前有兩種升級到HTTPS得方法:
1.第三方認(rèn)證的頒發(fā)CA證書(推薦)
2.自己制作證書(這種不知道能不能滿足蘋果的審核)
一: 第三方認(rèn)證的頒發(fā)CA證書
證書到底長什么樣子呢? 取個栗子:
大家請打開https://www.baidu.com
然后看到

p1034.png

那些證書機構(gòu)頒發(fā)的證書能用:蘋果官方信任證書
收費SSL證書: 網(wǎng)上百度一大把, 收費還挺貴的,自己可以多找?guī)讉€對比一下
免費SSL證書: 除了收費的CA證書機構(gòu), 你還可以去騰訊云申請免費的SSL證書, 教程免費在騰訊云申請SSL證書的方法
沃通(WoSign)免費的SSL證書最近被蘋果封殺了, 能不能用大家可以看一下蘋果的公告: 您的蘋果手機輕點“設(shè)置”>“通用”>“關(guān)于本機”>"證書信任設(shè)置">"進一步了解被信任的證書"去了解
檢測你的接口是否滿足蘋果的ATS要求, 有以下兩種方法:

  1. 騰訊云提供的檢測頁面檢測


    p1032.png
  2. 終端輸入 nsurl --ats-diagnostics --verbose 你的接口地址
    大家可以參考這篇文章,里面的說的很明白:
    關(guān)于iOS9中的App Transport Security相關(guān)說明及適配(更新于2016.7.1)
    里面會詳細(xì)說明你的證書哪點不符合ATS要求
    當(dāng)然下面自己制作證書去實現(xiàn)HTTPS的,檢測不通過的,所以我覺得審核會被拒
    這種方法配置好了, 在手機端就什么都不用配置就可以請求了

二 . 自己制作證書

蘋果官方信任證書里說到有三種證書:

  1. 可信的根證書用于建立信任鏈,以驗證由可信的根簽署的其他證書,例如,與 Web 服務(wù)器建立安全連接。當(dāng) IT 管理員創(chuàng)建 iPhone、iPad 或 iPod touch 的配置描述文件時,無需提供這些可信的根證書。
  2. 始終詢問的證書不受信任,但不受阻止。使用其中一個證書時,系統(tǒng)將提示您選擇是否信任該證書。
  3. 已阻止的證書視為被盜用,將不再受信任。
    自制證書我覺得應(yīng)該就是屬于第二種情況, 所以這種方法我也不知道能不能通過蘋果的審核, 只是提供一個方法給大家參考, 看到網(wǎng)上有人說可以,有人說不可以, 不到1月1號,自己沒試過都不敢說大話
    這種方式拿到后臺的接口用谷歌瀏覽器打開跟百度的證書是有區(qū)別的
p1033.png

很明顯沒有綠鎖, 當(dāng)打開的時候會詢問是否連接這個不受信任的連接才會進一步打開, 下面就來一步步的實現(xiàn)(包括怎么制作證書)
iOS使用自簽名證書實現(xiàn)HTTPS請求
iOS Https協(xié)議 自簽證書訪問數(shù)據(jù)參考這個例子的時候,博主自帶的Demo AFN框架請求不了數(shù)據(jù), 我用了最新AFN版本的成功返回數(shù)據(jù)
還可以參考一下
iOS 10 適配 ATS app支持https通過App Store審核
我在利用原生的代碼測試時遇到的問題

 @interface ViewController ()@end @implementation ViewController - (void)viewDidLoad { } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];NSURLSessionDataTask *task =[session dataTaskWithURL:[NSURL URLWithString:@"https://www.baidu.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); }];[task resume]; } - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)responsecompletionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { NSLog(@"接收到服務(wù)器響應(yīng)"); //注意:這里需要使用completionHandler回調(diào)告訴系統(tǒng)應(yīng)該如何處理服務(wù)器返回的數(shù)據(jù) //默認(rèn)是取消 /**NSURLSessionResponseCancel = 0,默認(rèn)的處理方式,取消NSURLSessionResponseAllow = 1, 接收服務(wù)器返回的數(shù)據(jù)NSURLSessionResponseBecomeDownload = 2,變成一個下載請求NSURLSessionResponseBecomeStream 變成一個流*/ completionHandler(NSURLSessionResponseAllow); } - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { NSLog(@"獲取到服務(wù)段數(shù)據(jù)"); NSLog(@"%@",[self jsonToDictionary:data]); } - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error { NSLog(@"請求完成%@", error); } - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challengecompletionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler { NSLog(@"證書認(rèn)證"); if ([[[challenge protectionSpace] authenticationMethod] isEqualToString: NSURLAuthenticationMethodServerTrust]) {do { SecTrustRef serverTrust = [[challenge protectionSpace] serverTrust]; NSCAssert(serverTrust != nil, @"serverTrust is nil"); if(nil == serverTrust) break; /* failed */ /***導(dǎo)入多張CA證書(Certification Authority,支持SSL證書以及自簽名的CA),請?zhí)鎿Q掉你的證書名稱*/ NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ca" ofType:@"cer"];//自簽名證書NSData* caCert = [NSData dataWithContentsOfFile:cerPath]; NSCAssert(caCert != nil, @"caCert is nil"); if(nil == caCert) break; /* failed */ SecCertificateRef caRef = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCert); NSCAssert(caRef != nil, @"caRef is nil"); if(nil == caRef) break; /* failed */ //可以添加多張證書 NSArray *caArray = @[(__bridge id)(caRef)]; NSCAssert(caArray != nil, @"caArray is nil"); if(nil == caArray) break; /* failed */ //將讀取的證書設(shè)置為服務(wù)端幀數(shù)的根證書 OSStatus status = SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)caArray); NSCAssert(errSecSuccess == status, @"SecTrustSetAnchorCertificates failed"); if(!(errSecSuccess == status)) break; /* failed */ SecTrustResultType result = -1; //通過本地導(dǎo)入的證書來驗證服務(wù)器的證書是否可信 status = SecTrustEvaluate(serverTrust, &result); if(!(errSecSuccess == status)) break; /* failed */ NSLog(@"stutas:%d",(int)status); NSLog(@"Result: %d", result); BOOL allowConnect = (result == kSecTrustResultUnspecified) || (result == kSecTrustResultProceed); if (allowConnect) {NSLog(@"success"); }else {NSLog(@"error"); } /* kSecTrustResultUnspecified and kSecTrustResultProceed are success */ if(! allowConnect) { break; /* failed */ } #if 0 /* Treat kSecTrustResultConfirm and kSecTrustResultRecoverableTrustFailure as success */ /* since the user will likely tap-through to see the dancing bunnies */ if(result == kSecTrustResultDeny || result == kSecTrustResultFatalTrustFailure || result == kSecTrustResultOtherError) break; /* failed to trust cert (good in this case) */ #endif // The only good exit point NSLog(@"信任該證書"); NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; completionHandler(NSURLSessionAuthChallengeUseCredential,credential); return [[challenge sender] useCredential: credentialforAuthenticationChallenge: challenge]; } while(0); } // Bad dog NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge,credential); return [[challenge sender] cancelAuthenticationChallenge: challenge];} - (NSDictionary *)jsonToDictionary:(NSData *)jsonData { NSError *jsonError; NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:&jsonError]; return resultDic;} @end 

下面說說我在配置自己制作證書過程中遇到的問題:
1.轉(zhuǎn)換證書: 把后臺給你的.crt證書轉(zhuǎn)化為.cer后綴
終端命令行openssl x509 -in 你的證書.crt -out 你的證書.cer -outform der

2.利用系統(tǒng)的方法來不到

- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challengecompletionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler { NSLog(@"證書認(rèn)證"); } 

這個方法的時候, 是因為后臺的傳輸協(xié)議還沒升級到TLS1.2, 叫后臺升級后就可以來到驗證證書的這個方法了.
3.拖入證書讀取不出證書數(shù)據(jù)
參考: https的證書錯誤,錯誤碼-1012問題及解決方案
SDWebImage: 項目中大家用到AFN請求網(wǎng)絡(luò)數(shù)據(jù), 升級驗證SSL證書的方案相信你看完上面的參考文章已經(jīng)沒問題了, 我給出的代碼, 自定義網(wǎng)絡(luò)請求也沒問題了, 還有就是SDWebImage框架的請求HTTPS的圖片時,大家可以繞過證書驗證去加載圖片

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

希望幫到你。


本頁內(nèi)容由塔燈網(wǎng)絡(luò)科技有限公司通過網(wǎng)絡(luò)收集編輯所得,所有資料僅供用戶學(xué)習(xí)參考,本站不擁有所有權(quán),如您認(rèn)為本網(wǎng)頁中由涉嫌抄襲的內(nèi)容,請及時與我們聯(lián)系,并提供相關(guān)證據(jù),工作人員會在5工作日內(nèi)聯(lián)系您,一經(jīng)查實,本站立刻刪除侵權(quán)內(nèi)容。本文鏈接:http://jstctz.cn/20447.html
相關(guān)開發(fā)語言
 八年  行業(yè)經(jīng)驗

多一份參考,總有益處

聯(lián)系深圳網(wǎng)站公司塔燈網(wǎng)絡(luò),免費獲得網(wǎng)站建設(shè)方案及報價

咨詢相關(guān)問題或預(yù)約面談,可以通過以下方式與我們聯(lián)系

業(yè)務(wù)熱線:余經(jīng)理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

  • QQ咨詢
  • 在線咨詢
  • 官方微信
  • 聯(lián)系電話
    座機0755-29185426
    手機13699882642
  • 預(yù)約上門
  • 返回頂部