iOS開發 AFN配置https請求


 

  1. 一.項目中的網絡交互都是基於AFN,要求AFN版本在3.0及其以上;  
  2.   
  3. 二.代碼部分  
  4. 設置AFN請求管理者的時候 添加 https ssl 驗證。  
  5. // 1.獲得請求管理者  
  6. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];  
  7. // 2.加上這個函數,https ssl 驗證。  
  8. [manager setSecurityPolicy:[self customSecurityPolicy]];  
  9.   
  10. // https ssl 驗證函數  
  11.   
  12. - (AFSecurityPolicy *)customSecurityPolicy {  
  13.       
  14.     // 先導入證書 證書由服務端生成,具體由服務端人員操作  
  15.     NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];//證書的路徑  
  16.     NSData *cerData = [NSData dataWithContentsOfFile:cerPath];  
  17.       
  18.     // AFSSLPinningModeCertificate 使用證書驗證模式  
  19.     AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];  
  20.          // allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認為NO  
  21.     // 如果是需要驗證自建證書,需要設置為YES  
  22.     securityPolicy.allowInvalidCertificates = YES;  
  23.       
  24.     //validatesDomainName 是否需要驗證域名,默認為YES;  
  25.     //假如證書的域名與你請求的域名不一致,需把該項設置為NO;如設成NO的話,即服務器使用其他可信任機構頒發的證書,也可以建立連接,這個非常危險,建議打開。  
  26.     //置為NO,主要用於這種情況:客戶端請求的是子域名,而證書上的是另外一個域名。因為SSL證書上的域名是獨立的,假如證書上注冊的域名是www.google.com,那么mail.google.com是無法驗證通過的;當然,有錢可以注冊通配符的域名*.google.com,但這個還是比較貴的。  
  27.     //如置為NO,建議自己添加對應域名的校驗邏輯。  
  28.     securityPolicy.validatesDomainName = NO;  
  29.       
  30.     securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil nil];  
  31.       
  32.     return securityPolicy;  
  33. }  
  34.   
  35.   
  36. 三.關於證書 參考文章:http://www.2cto.com/Article/201510/444706.html  
  37. 服務端給的是crt后綴的證書,其中iOS客戶端用到的cer證書,是需要開發人員轉換:  
  38. 1.證書轉換  
  39. 在服務器人員,給你發送的crt證書后,進到證書路徑,執行下面語句  
  40.   
  41. openssl x509 -in 你的證書.crt -out 你的證書.cer -outform der  
  42.   
  43. 這樣你就可以得到cer類型的證書了。雙擊,導入電腦。  
  44. 2.證書放入工程  
  45. 1、可以直接把轉換好的cer文件拖動到工程中。  
  46. 2、可以在鑰匙串內,找到你導入的證書,單擊右鍵,導出項目,就可以導出.cer文件的證書了  
  47.   
  48. 參考鏈接:http://www.jianshu.com/p/97745be81d64。  
  49.    
  50. 四.在info.plist去掉之前允許http加載的代碼 就是刪除下面的代碼(么有的就省了這一步)  
  51.  <key>NSAppTransportSecurity</key>  
  52.     <dict>  
  53.  <key>NSAllowsArbitraryLoads</key>  
  54.  <true/>  
  55.     </dict>  

 



 

 

[objc]  view plain  copy
  1. 一、  
  2.  2017年1月1日起所有提交到 App Store 的App必須強制開啟 ATS。  
  3.  就是要求去掉 Info.plist 的 NSAllowsArbitraryLoads  
  4.  1.這要求所有通過APP發送的網絡請求都需要https  
  5.    
  6.  2.開啟ATS,圖片(例如圖像的URL)等靜態文件的url需要用https,否則會無法加載;  
  7.    
  8.  3.對於H5,網頁瀏覽和視頻播放的行為,iOS 10 中新加入了NSAllowsArbitraryLoadsInWebContent 鍵。通過將它設置為 YES ,  
  9.  可以讓你的 app 中的 WKWebView 和使用 AVFoundation 播放的在線視頻不受 ATS 的限制。  
  10.  這也應該是絕大多數使用了相關特性的 app 的選擇。但是壞消息是這個鍵在 iOS 9 中並不會起作用.  
  11.    
  12.  4.iOS9中可以選擇使用 NSExceptionDomains 來針對特定的域名開放 HTTP 應該要相對容易過審核。“需要訪問的域名是第三方服務器,他們沒有進行 HTTPS 對應”會是審核時的一個可選理由,但是這應該只需要針對特定域名,而非全面開放。如果訪問的是自己的服務器的話,可能這個理由會無法通過。是需要在Info.plist 配置中的XML源碼  
  13.      <key>NSAppTransportSecurity</key>  
  14.      <dict>  
  15.          <key>NSExceptionDomains</key>  
  16.          <dict>  
  17.              <key>XXX.com</key>  
  18.              <dict>  
  19.                  <!--適用於這個特定域名下的所有子域-->  
  20.                  <key>NSIncludesSubdomains</key>  
  21.                  <true/>  
  22.                  <!--擴展可接受的密碼列表:這個域名可以使用不支持 forward secrecy 協議的密碼-->  
  23.                  <key>NSExceptionRequiresForwardSecrecy</key>  
  24.                  <false/>  
  25.                  <!--允許App進行不安全的HTTP請求-->  
  26.                  <key>NSExceptionAllowsInsecureHTTPLoads</key>  
  27.                  <true/>  
  28.                  <!--在這里聲明所支持的 TLS 最低版本-->  
  29.                  <key>NSExceptionMinimumTLSVersion</key>  
  30.                  <string>TLSv1.1</string>  
  31.              </dict>  
  32.          </dict>  
  33.      </dict>  
  34.    
  35.  二、  
  36.  目前項目中用到的第三方已經支持https的有  
  37.  WKWebView  
  38.  UIWebView  
  39.  SDWebImage  
  40.  支付寶SDK  
  41.  微信支付SDK  
  42.  友盟SDK  
  43.  極光推送SDK  
  44.    
  45.  其中用到的UIWebView 以后要逐步替換為WKWebView  


iOS適配https參考鏈接:
https://github.com/ChenYilong/iOS9AdaptationTips

 

 

證書生成的參考鏈接:http://www.2cto.com/Article/201510/444706.html

 

證書轉換的參考鏈接:http://www.jianshu.com/p/97745be81d64

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM