App適配https請求

iOS進行https請求時,比http請求多了一項ssl加密功能,在數據傳輸層對數據進行加密傳輸,保證數據的安全。
ssl加密需要證書驗證;證書是ca機構頒發的話,不需要多餘的代碼,請求以前http的時候怎麼寫現在還怎麼寫,只是把請求url的http改成https;但是如果站點的證書是自簽證書(如通過java keytool自生成),ios默認是驗證不通過的,請求會失敗,就需要在http請求做對應的處理。

比如使用AFNetworking進行網絡請求,就需要將自簽名證書配置進去,代碼示例如下:
// /先導入證書
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];//證書的路徑
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
// AFSSLPinningModeCertificate 使用證書驗證模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認爲NO
// 如果是需要驗證自建證書,需要設置爲YES
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates = @[certData];


代碼層配置完成後,需配置app的info.plist;如圖


需要配置app transport security settings;其中有三項配置,分別爲:
Allows Arbitrary Loads 默認值爲NO,表示禁止非https請求;也就是爲NO時,只允許https請求;設置爲YES時,允許任何請求;
Allows Arbitrary Loads In Web Content 默認值爲NO;該屬性表示web界面是否可以任意加載,爲NO時只允許加載https請求,爲YES時,允許加載任意請求;
Exception Domains 該屬性作用是添加站點,對該站點進行設置;該站點是否必須是https請求,該站點的子節點是否需要https請求;可以設置如下屬性:
NSIncludesSubdomains(包含所有的子站點);
NSExceptionAllowsInsecureHTTPLoads(允許加載http請求);
NSExceptionMinimumTLSVersion(需要TLS最低版本);
NSExceptionRequiresForwardSecrecy;
NSRequiresCertificateTransparency;


通過自己app的驗證,自簽名證書,Xcode8.2.1,iOS10.2;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章