日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 适配HTTPS方法

發(fā)布時間:2023/12/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 适配HTTPS方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一切為了迎合蘋果

在WWDC 2016開發(fā)者大會上,蘋果宣布了一個最后期限:到2017年1月1日 App Store中的所有應(yīng)用都必須啟用 App Transport Security安全功能。App Transport Security(ATS)是蘋果在iOS 9中引入的一項隱私保護(hù)功能,屏蔽明文HTTP資源加載,連接必須經(jīng)過更安全的HTTPS。蘋果目前允許開發(fā)者暫時關(guān)閉ATS,可以繼續(xù)使用HTTP連接,但到年底所有官方商店的應(yīng)用都必須強制性使用ATS。但如果2017年1月1日起您仍一意孤行那么在Apple Store中您的App將不能被用戶下載使用。

兼容HTTP

新特性要求App內(nèi)訪問的網(wǎng)絡(luò)必須使用HTTPS協(xié)議。
但是現(xiàn)在公司的項目使用的是HTTP協(xié)議,使用私有加密方式保證數(shù)據(jù)安全?,F(xiàn)在也不能馬上改成HTTPS協(xié)議傳輸,需要兼容下HTTP。
網(wǎng)絡(luò)請求報錯:The resource could not be loaded because the App Transport Security policy require:

所以先兼容下http:

  • 在Info.plist中添加NSAppTransportSecurity類型Dictionary。
  • 在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設(shè)為YES;
  • 為了適配webView中的http鏈接:在NSAppTransportSecurity下添加Allow Arbitrary Loads in Web Content類型Boolean,值設(shè)為YES;
  • 適配HTTPS

    iOS開發(fā)者來說,需要盡早解決HTTPS請求的問題。

    發(fā)送HTTPS請求信任SSL證書和自簽名證書,分為三種情況:

  • (較少的公司)如果你的app服務(wù)端安裝的是SLL頒發(fā)的CA,可以使用系統(tǒng)方法直接實現(xiàn)信任SSL證書,關(guān)于Apple對SSL證書的要求請參考:蘋果官方文檔CertKeyTrustProgGuide
    示例代碼:
  • NSURL *URL = [NSURL URLWithString:URLString];NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];//創(chuàng)建同步連接NSError *error = nil;NSData *receivedData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; NSString *receivedInfo = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
  • (大部分公司)基于AFNetWorking的SSL特定服務(wù)器證書信任處理,使用自簽名證書認(rèn)證,重寫AFNetWorking的customSecurityPolicy方法。
    ###驗證證書步驟:
  • 從服務(wù)器要來.crt格式的證書,然后用Mac鑰匙串打開,然后導(dǎo)出?.cer格式的證書
    • 把.cer證書導(dǎo)入程序的 中。
    • 驗證證書的代碼:
    /**https證書驗證*/ +(AFSecurityPolicy*)customSecurityPolicy {// /先導(dǎo)入證書NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"cer"];//證書的路徑NSData *certData = [NSData dataWithContentsOfFile:cerPath];// AFSSLPinningModeCertificate 使用證書驗證模式 (AFSSLPinningModeCertificate是證書所有字段都一樣才通過認(rèn)證,AFSSLPinningModePublicKey只認(rèn)證公鑰那一段,AFSSLPinningModeCertificate更安全。但是單向認(rèn)證不能防止“中間人攻擊”)AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];// allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認(rèn)為NO// 如果是需要驗證自建證書,需要設(shè)置為YESsecurityPolicy.allowInvalidCertificates = YES;//validatesDomainName 是否需要驗證域名,默認(rèn)為YES;//假如證書的域名與你請求的域名不一致,需把該項設(shè)置為NO;如設(shè)成NO的話,即服務(wù)器使用其他可信任機構(gòu)頒發(fā)的證書,也可以建立連接,這個非常危險,建議打開。//置為NO,主要用于這種情況:客戶端請求的是子域名,而證書上的是另外一個域名。因為SSL證書上的域名是獨立的,假如證書上注冊的域名是www.google.com,那么mail.google.com是無法驗證通過的;當(dāng)然,有錢可以注冊通配符的域名*.google.com,但這個還是比較貴的。//如置為NO,建議自己添加對應(yīng)域名的校驗邏輯。securityPolicy.validatesDomainName = NO;securityPolicy.pinnedCertificates = (NSSet *)@[certData];return securityPolicy; }

    其中的cerPath就是app bundle中證書路徑,certificate為證書名稱的宏,僅支持cer格式,securityPolicy的相關(guān)配置尤為重要,請仔細(xì)閱讀customSecurityPolicy方法并根據(jù)實際情況設(shè)置其屬性。

    這樣,就能夠在AFNetWorking的基礎(chǔ)上使用HTTPS協(xié)議訪問特定服務(wù)器,但是不能信任根證書的CA文件,因此這種方式存在風(fēng)險,讀取pinnedCertificates中的證書數(shù)組的時候有可能失敗,如果證書不符合,certData就會為nil。

    • 在發(fā)送請求時候 加上這行代碼,https ssl 驗證。
    // [[AFHTTPSessionManager manager] setSecurityPolicy:[JYAFNetworkingManager customSecurityPolicy]];
  • 更改系統(tǒng)方法,發(fā)送異步NSURLConnection請求。
    這種方式用的很少就不多介紹了有新區(qū)可以自行搜索;
  • 大部分可以參考:
    http://www.jianshu.com/p/f312a84a944c
    http://www.jianshu.com/p/6b9c8bd5005a
    http://www.jianshu.com/p/b03ae4a1a2d3

    總結(jié)

    以上是生活随笔為你收集整理的iOS 适配HTTPS方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。