自從https推出以后,客戶端對網(wǎng)絡(luò)安全的要求程度也越來越高。甚至在iOS9之后,蘋果強制要求必須支持https請求。
https是什么呢?它又是如何保證數(shù)據(jù)安全的呢?
簡單來說,https就是http+TLS/SSL。就是在http上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會通過TLS進行加密,也就說傳輸中的數(shù)據(jù)都是加密的,如果不知道私鑰,是無法真正知道傳輸內(nèi)容的真正意思的。
整個https單向驗證流程簡單總結(jié)如下:
當(dāng)然這僅僅是一個單向認證,https還會有雙向認證,相對于單向認證也很簡單。僅僅多了服務(wù)端驗證客戶端這一步。
那么在AFNetworking中,我們要完成自簽名證書配置:
// 自簽名證書在路徑NSString *certFilePath = [[NSBundle mainBundle] pathForResource:@"service" ofType:@"cer"];// 自簽名證書轉(zhuǎn)換成二進制數(shù)據(jù)NSData *certData = [NSData dataWithContentsOfFile:certFilePath];// 將二進制數(shù)據(jù)放到NSSet中NSSet *certSet = [NSSet setWithObject:certData];/* AFNetworking中的AFSecurityPolicy實例化方法 第一個參數(shù): AFSSLPinningModeNone, //不驗證 AFSSLPinningModePublicKey, //只驗證公鑰 AFSSLPinningModeCertificate, //驗證證書 第二個參數(shù):存放二進制證書數(shù)據(jù)的NSSet*/AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:certSet];// shareManager 是繼承自AFHTTPSessionManager的一個類的實例對象sharedManager.securityPolicy = policy;
這樣在請求時,如果服務(wù)器要校驗自簽名證書就會調(diào)用AFSecurityPolicy類中以下方法
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain
AFNetworking就是在這個方法中進行的單向驗證。如果有需要雙向驗證的也需要重寫這個方法,以實現(xiàn)雙向驗證。(雙向驗證在銀行類等app中使用的較多)
在該方法中使用自簽名證書可能會出現(xiàn)的一個問題就是
這行代碼有可能數(shù)組中添加了nil,即自簽名證書沒有獲取到。
解決方法:
其本質(zhì)原因是后端的自簽名證書需要進行base64反編碼才能使用。
總結(jié)語:
通過對自簽名證書這塊的研究,對https有了更加深入、更深刻的認識,同時對AFNetworking中AFSecurityPolicy的源碼進行了閱讀和理解。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。
新聞熱點
疑難解答
圖片精選