iOS進行https請求時吼蚁,比http請求多了一項ssl加密功能,在數(shù)據(jù)傳輸層對數(shù)據(jù)進行加密傳輸问欠,保證數(shù)據(jù)的安全肝匆。
ssl加密需要證書驗證;證書是ca機構(gòu)頒發(fā)的話顺献,不需要多余的代碼旗国,請求以前http的時候怎么寫現(xiàn)在還怎么寫,只是把請求url的http改成https注整;但是如果站點的證書是自簽證書(如通過java keytool自生成)能曾,ios默認是驗證不通過的,請求會失敗肿轨,就需要在http請求做對應(yīng)的處理寿冕。
比如使用AFNetworking進行網(wǎng)絡(luò)請求,就需要將自簽名證書配置進去椒袍,代碼示例如下:
// /先導入證書
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];//證書的路徑
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
// AFSSLPinningModeCertificate 使用證書驗證模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允許無效證書(也就是自建的證書)驼唱,默認為NO
// 如果是需要驗證自建證書,需要設(shè)置為YES
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates = @[certData];
代碼層配置完成后驹暑,需配置app的info.plist玫恳;如圖
需要配置app transport security settings;其中有三項配置优俘,分別為:
Allows Arbitrary Loads 默認值為NO京办,表示禁止非https請求;也就是為NO時帆焕,只允許https請求惭婿;設(shè)置為YES時,允許任何請求;
Allows Arbitrary Loads In Web Content 默認值為NO审孽;該屬性表示web界面是否可以任意加載县袱,為NO時只允許加載https請求,為YES時佑力,允許加載任意請求式散;
Exception Domains 該屬性作用是添加站點,對該站點進行設(shè)置打颤;該站點是否必須是https請求暴拄,該站點的子節(jié)點是否需要https請求;可以設(shè)置如下屬性:
NSIncludesSubdomains(包含所有的子站點)编饺,
NSExceptionAllowsInsecureHTTPLoads(允許加載http請求)乖篷,
NSExceptionMinimumTLSVersion(需要TLS最低版本),
NSExceptionRequiresForwardSecrecy透且,
NSRequiresCertificateTransparency撕蔼;
參考文章:
https://onevcat.com/2016/06/ios-10-ats/
http://www.cnblogs.com/symen/p/5566204.html