蘋果在2016年6月份的發布會上提出2017年的1月1日,所有AppStore的APP必須要開啟ATS(也就是使用HTTPS)。
一、開通SSL
如果是自己測試可以申請免費的,公司用的話最好是購買付費SSL證書.
二、客戶端
客戶端適配https,也就是啟用ATS特性需要做的事
1.獲取具有ATS特性的驗證證書,后臺人員可以給或者直接在pc域名上的鎖標志把證書拉下來;
2.修改后臺適配好的域名http->https;
3.修改info.plist文件AppTransportSecuritySettings,適配https;
4.AFHTTPSessionManager實例配置https代碼;
5.webView添加防止請求撤銷代碼;
三、代碼
NSString *url = @"https://127.20.你的app";
//1.獲取站點證書
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ssl_bundle" ofType:@".cer"];
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
NSSet *cerSet = [NSSet setWithObjects:cerData, nil];
//2.https配置
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//allowInvalidCertificates 是否信任服務器無效(也就是自建證書)或過期的SSL證書。默認為“不”。
//需要自建證書則默認YES,測試的時候可以關閉,正式的開啟
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否驗證域名。默認為“是”。 建議開啟
securityPolicy.validatesDomainName = YES;
//3.添加證書
[securityPolicy setPinnedCertificates:cerSet];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//4.配置https
manager.securityPolicy = securityPolicy;
[manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
NSLog(@"進度:%f",1.0 * downloadProgress.completedUnitCount/downloadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {
NSLog(@"成功:%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗:%@",error);
}];