iOS2017年配置HTTPS

在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能。也就是说,自2017年起,网络请求必须由http改成https。
相关配置方案:
1.后台配置一个CA证书,包含域名信息等,保存后给前端使用,前端把cer文件拖入工程中。(必须保证前后端使用的证书一致)
2.info.plist 文件中原本设置NSAllowsArbitraryLoads 设置为NO,NSAllowsArbitraryLoads若设置为YES,则表示禁用ATS功能,NO为开启 ATS功能,默认为NO
3.苹果硬性要求服务端的TLS版本必须>= 1.2
4.服务端配置OK后,前端把cer文件拖入工程中,copy ,然后进行代码设置
iOSAFNetWorking加载证书的相关代码:

NSString *cerPath = [[NSBundle mainBundle] pathForResource:@”server” ofType:@”cer”];
NSData * certData =[NSData dataWithContentsOfFile:cerPath];
NSSet * certSet = [[NSSet alloc] initWithObjects:certData, nil];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// 是否允许,NO– 不允许无效的证书(如果是自建证书相当于无效证书,此处若是自建证书,必须设置为YES)
[securityPolicy setAllowInvalidCertificates:YES];
// 设置证书
[securityPolicy setPinnedCertificates:certSet];
manager.securityPolicy = securityPolicy;

接下来继续执行正常AF请求。

我们曾遇到的问题:
1.网络请求直接失败,错误信息如下:
Error Domain=NSURLErrorDomain Code=-1200 “发生了 SSL 错误,无法建立与该服务器的安全连接。” UserInfo={_kCFStreamErrorCodeKey=-9847, NSLocalizedRecoverySuggestion=您仍要连接此服务器吗?, NSUnderlyingError=0x7fbc09cd58c0 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 “(null)” UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9847, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9847}}, NSLocalizedDescription=发生了 SSL 错误,无法建立与该服务器的安全连接。, NSErrorFailingURLKey=https://192.168.100.22:8011/interfaces/index.ashx?action=get_date_now, NSErrorFailingURLStringKey=https://192.168.100.22:8011/interfaces/index.ashx?action=get_date_now, _kCFStreamErrorDomainKey=3}

1.检查发现是服务端的TLS版本是1.1,没满足1.2版本配置
2.解决方式:后台升级TLS版本
3,运行程序,依然网络请求失败,但不是这个错误了,发现证书错误,制作证书的时候没加入域名地址。解决后网络正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值