App审核被拒Ipv6 相关,及HTTPS证书问题(单向认证)
App审核被拒——Ipv6相关
首先,检测App是否支持IPv6。
教程1:连网线建立ipv6测试环境。
教程2:无网线建立ipv6测试环境
官方文档:连网线建立ipv6测试环境。
若是测试通过,则说明客户端应用在IPv6网络下,是(基本)没有问题的。但是此操作无法验证服务器能够对IPv6网络做出正确的响应。
若是IPv6测试环境测试没有通过,解决方案:
① 更换第三方的SDK至最新版本。支付宝支付,微信支付,第三方登录、分享,环信等。
② 老版本的网络请求函数。ASI,AFN。注意:确认IPv6搭建连接是否正确,所有功能是否在IPv6下都测试了,App需安装在iPhon6以上的机器测试,iPhon5连不上IPv6 wifi,搭建IPv6可以使用Mac连接网线(教程1)或Mac连无线(教程2)。
③ socket请求适配IPv6,我们这暂时没有使用这方面,可略过此操作。参考。
④ 在IPv6下,测试App所有界面,哪里网络连接失败就换或者改对应的代码。
一般,这些操作后,App通过IPv6测试是没问题的。
还需要检测服务器是否支持IPv6。打开终端,执行dig +nocmd +nostats 域名 AAAA
检测服务器是否支持ipv6若执行后,status对应的码是NOERROR,则基本没问题。如果返回的响应是SERVFAIL,在已经验证了客户端没有问题前提下,剩下的就是运维、后台的工作了,需要服务器更改DNS配置,直到稳定返回NOERROR。
以上操作跑一遍后,提交审核,还是并不能保证审核百分之百能过。对策:
① 运维/服务器参考:针对苹果官方ipv6审核的综合解决方案 及内部链接;
② 拍视频给审核人员,视频内容需详细:搭建环境的过程(上面教程1或者2的操作过程)。手机打开飞行模式,正确连接电脑wifi的过程,所有标记搭建IPv6环境搭建成功的画面,App所有界面(都可以加载数据)运行良好的状态的画面。视频展示给审核人员的方法:① 视频传到youtwobe,把视频链接Reply给苹果。② 直接Reply视频文件压缩打包给苹果。我在用户端1.0版提交审核时使用过这个方法,审核通过(注:我们的用户端1.0被拒,苹果给出的不是IPv6)。
客户端代码部分是咱们开发者自己解决。至于服务器端无法解决,有必要找专业人员参与。
最后,IPv6的整体流程:
1)先搭建IPv6测试环境;
2)确保服务器支持IPv6;
3)再把每个界面点一下,观察所有的网络是否有异常,哪里不会(对)点(修改或者更换)哪里;
4)服务器端无法解决,有必要找专业人员参与。
一个情况,我们的用户端App 2.0第一次提交审核被拒,苹果给出原因IPv6。情况分析:2016年12月31日提交审核,在提交审核之前,测试所有流程均可跑通。2017年1月6日,苹果给出审核结果,是IPv6,登录界面无法登录进入App。测试后发现:在iOS10.0的真机上,所有流程还是没问题。在10.3的模拟器或者真机上出现问题。纠结一番后,向后台要来证书,xxx.crt。需要把这个.crt文件转成.cer或者.der文件。打开终端:
.crt转.der:openssl x509 –in xxx.crt文件路径-out xxx.der文件路径-outform DER
.crt转.cer:openssl x509 -in xxx.crt文件路径-out xxx.cer文件路径-outform DER
当我把证书转换后,在“钥匙串访问”中查看此证书,可以看到:
服务器证书也就是由不被信任的签发者签名颁发的。查一下StartCom,这是被沃通收购的机构(http://digi.163.com/16/1102/09/C4RVPJA1001687H3.html)。沃通和StartCom由于涉及到一些非法签名的案例,先后被苹果和谷歌取消信任,等待其悔过自新……至于什么时候能恢复信任,还是未知数;
把请求的https://ssl.heartbook.com.cn放到Safari里,第一次有“此网址不被信任,是否继续”的提示;
另外,检测HTTPS服务器是否符合ATS特性中的要求:终端执行:nscurl --ats-diagnostics --verbose https://xxx.com
ATS特性检测截图 1 ATS特性检测截图 2截图是检测我们的HTTPS服务器,TLSv1.0 /1.1 /1.2,result均为FAIL。原因:不受信任的证书,通不过ATS的检测。
那么,我们的用户端App2.0审核被拒的原因,是服务器证书不被信任造成的。
解决此问题的方法:
① 通过代码来调整,信任服务器的证书(我的解决办法是使用的这个方法)。个人觉得坏处是:以后的每个App里面都要这么设置,或者苹果又要修改什么后会有未知情况发生,影响已上线的App,需要重新发版本才能修复线上,但重新发版本又需要一定的审核时间。
首先,按上文步骤,向服务器要证书,转成.cer,把.cer文件拖到工程里。我们的请求工具是用AFnetworking封装的类,修改此类,添加代码。关键代码:在AFHTTPSessionManager实例化前,设置securityPolicy.allowInvalidCertificates = YES;(截图中handle是AFHTTPSessionManager)。
在请求工具中,AFHTTPSessionManager前添加② 服务器端使用受信任、合法的证书。使用这个解决方案,可以说治标治本。App端基本什么都不用管,http改成https就OK。个人觉得好处:如果苹果官方做有关这方面的改动,对已上线的App影响不会太大。起码出问题受影响的线上App不用重新发版本,只需服务器端做相应的修改,即可修复。
补充一点:解决Mac Pro无法插网线上网( 不是广告 *(→ _ ←)* )。
由于Mac自身机身厚度的限制,使机身本身无法直接连接网线。那么就需要一个外接网线转换头,我使用的是绿联的产品(绿联USB百兆网卡)。
如果Mac是第一次是使用这个产品,需要安装驱动。驱动下载连接:http://www.lulian.cn/download/26-cn.html。下载时选择Mac OX 10.*对应的驱动。驱动安装是类似Windows傻瓜式的安装方式,一路下一步,最后“完成”,重启电脑。
重启后,插上设备,连上网线,打开系统偏好设置–网络–点击左下角的“+”号–点开接口(可以发现别安装驱动前多了一个选项:USB以太网,选之)-服务名称(自己起个名字)-创建即可。
添加网络接口 选择USB以太网,命名后,创建参考: