iOS适配HTTPS、开启ATS让你的域名更安全

马上要到苹果给出的到期时间了,适配HTTPS提上了日程。

苹果在2016年6月份的发布会上提出2017年的1月1日,所有AppStore的APP必须要开启ATS(也就是使用HTTPS)。适配HTTPS其实前端并不需要很多的工作量,下面我就说一下我的适配之路,供大家参考。

开通SSL

如果是自己测试可以申请免费的,公司用的话最好是购买付费SSL证书,这一部分后台人员就可以搞定了。

客户端

客户端适配https,也就是启用ATS特性需要做的事

 1.获取具有ATS特性的验证证书,后台人员可以给或者直接在pc域名上的锁标志把证书拉下来;

 2.修改后台适配好的域名http->https;

 3.修改info.plist文件AppTransportSecuritySettings,适配https;

 4.AFHTTPSessionManager实例配置https代码;

 5.webView添加防止请求撤销代码;

话不多说上代码

NSString *url = @"https://api";
    //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);
    }];


UIWebView

//加载失败
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"加载失败-----web:%@",_urlString);
    //一个页面没有被完全加载之前收到下一个请求,此时迅速会出现此error,error=-999
    //此时可能已经加载完成,则忽略此error,继续进行加载。
    if ([error code] == NSURLErrorCancelled) {
        return;
    }
    [SVProgressHUD dismiss];
}
因为HTTPS的请求方式会稍微慢一点点导致webView加载的时候会出现类似问题(个人愚见),这样处理可以避免次问题。

问题

在配置过程中的问题:1.证书和代码都搞定后,请求接口返回code-999这个意思是请求取消,最后确定是证书问题。

注意:ssl证书域名里的一个通配符只能使用一级域名,多级域名要使用多个通配符(这个就是上面的问题)。

 比如https://ddy.text.com这个是一级域名,https://ddy.api.text.com则是二级域名,如果设置的支持域名是:*.ddy.com则就是一级域名可以验证成功。想适配这种情况有两种方式:1.在花一千块钱多买一个通配符的使用权限(不划算啊); 2.利用域名映射就可以解决啦。




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值