国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS 基于AFNetworking下自簽名證書配置的方法

2019-10-21 18:41:27
字體:
來源:轉載
供稿:網友

自從https推出以后,客戶端對網絡安全的要求程度也越來越高。甚至在iOS9之后,蘋果強制要求必須支持https請求。

https是什么呢?它又是如何保證數據安全的呢?

簡單來說,https就是http+TLS/SSL。就是在http上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,也就說傳輸中的數據都是加密的,如果不知道私鑰,是無法真正知道傳輸內容的真正意思的。

整個https單向驗證流程簡單總結如下:

  1. 就是用戶發(fā)起請求,服務器響應后返回一個證書,證書中包含一些基本信息和公鑰。
  2. 用戶拿到證書后,去驗證這個證書是否合法,不合法,則請求終止。
  3. 合法則生成一個隨機數,作為對稱加密的密鑰,用服務器返回的公鑰對這個隨機數加密。然后返回給服務器。
  4. 服務器拿到加密后的隨機數,利用私鑰解密,然后再用解密后的隨機數(對稱密鑰),把需要返回的數據加密,加密完成后數據傳輸給用戶。
  5. 最后用戶拿到加密的數據,用一開始的那個隨機數(對稱密鑰),進行數據解密。整個過程完成。

當然這僅僅是一個單向認證,https還會有雙向認證,相對于單向認證也很簡單。僅僅多了服務端驗證客戶端這一步。

那么在AFNetworking中,我們要完成自簽名證書配置:

// 自簽名證書在路徑NSString *certFilePath = [[NSBundle mainBundle] pathForResource:@"service" ofType:@"cer"];// 自簽名證書轉換成二進制數據NSData *certData = [NSData dataWithContentsOfFile:certFilePath];// 將二進制數據放到NSSet中NSSet *certSet = [NSSet setWithObject:certData];/* AFNetworking中的AFSecurityPolicy實例化方法  第一個參數:  AFSSLPinningModeNone,  //不驗證  AFSSLPinningModePublicKey,   //只驗證公鑰  AFSSLPinningModeCertificate,   //驗證證書  第二個參數:存放二進制證書數據的NSSet*/AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:certSet];// shareManager 是繼承自AFHTTPSessionManager的一個類的實例對象sharedManager.securityPolicy = policy;

這樣在請求時,如果服務器要校驗自簽名證書就會調用AFSecurityPolicy類中以下方法

- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust         forDomain:(NSString *)domain

AFNetworking就是在這個方法中進行的單向驗證。如果有需要雙向驗證的也需要重寫這個方法,以實現雙向驗證。(雙向驗證在銀行類等app中使用的較多)

在該方法中使用自簽名證書可能會出現的一個問題就是

 

復制代碼 代碼如下:

[pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)];

 

這行代碼有可能數組中添加了nil,即自簽名證書沒有獲取到。

解決方法:

  1. 將后端發(fā)過來的.crt證書,修改后綴.cer,導入鑰匙串。
  2. 再從鑰匙串導出該證書,拉到項目里直接使用

其本質原因是后端的自簽名證書需要進行base64反編碼才能使用。

總結語:

通過對自簽名證書這塊的研究,對https有了更加深入、更深刻的認識,同時對AFNetworking中AFSecurityPolicy的源碼進行了閱讀和理解。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 孟州市| 光泽县| 类乌齐县| 高青县| 阜阳市| 千阳县| 芜湖市| 邻水| 大同市| 高密市| 自贡市| 盐池县| 赞皇县| 斗六市| 奇台县| 山丹县| 奉化市| 玉山县| 朔州市| 中江县| 阿合奇县| 靖江市| 鄂伦春自治旗| 聂拉木县| 高碑店市| 长汀县| 邳州市| 绥宁县| 高安市| 临颍县| 余姚市| 巴楚县| 绥阳县| 晋城| 桓台县| 安康市| 涿鹿县| 武宣县| 故城县| 湾仔区| 团风县|