iOS 适配https(AFNetworking3.0为例)

作者: vision_colion | 来源:发表于2016-11-16 09:44 被阅读7177次

1.准备证书

首先找后台要一个证书(SSL证书,一般你跟后台说要弄https,然后让他给你个证书,他就知道了),我们需要的是.cer的证书。但是后台可能给我们的是.crt的证书。我们需要转换一下:打开终端 -> cd到.crt证书路径 -> 输入openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der,证书就准备好了,拖入工程,记得选copy。

2.新建一个类或者类方法

以下代码借鉴的,楼主自己是放在一个叫FactoryUI的类中

//支持https
+ (AFSecurityPolicy *)customSecurityPolicy
{
    //先导入证书,找到证书的路径
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"你的证书名字" ofType:@"cer"];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    
    //AFSSLPinningModeCertificate 使用证书验证模式
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    
    //allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
    //如果是需要验证自建证书,需要设置为YES
    securityPolicy.allowInvalidCertificates = YES;
    
    //validatesDomainName 是否需要验证域名,默认为YES;
    //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
    //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
    //如置为NO,建议自己添加对应域名的校验逻辑。
    securityPolicy.validatesDomainName = NO;
    NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];
    securityPolicy.pinnedCertificates = set;
    
    return securityPolicy;
}

3.修改AFNetWorking的请求(AFNetworking3.0为例)

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer.timeoutInterval = 5.0;
    [manager setSecurityPolicy:[FactoryUI customSecurityPolicy]];//如2若提到的FactoryUI的类方法
    ···后面的就还是一样了

4.打开ATS(默认是开启的,手动屏蔽了的记得开启)

NO:表示开启了 (默认)
YES:表示屏蔽了ATS

开启ATS.png

*12.15 纠正

网上疯传的2017.1.1开始苹果强制推行https纠正一下:

苹果说明.png
另外传送门:WWDC开发者论坛
苹果开发者(中国):4006 701 855
技术支持:400-666-8800
以上两个电话确认过了,苹果内部没有通知必须使用https,不想升级的暂时可以安心了。
12.21补充:12.21苹果官方说明强制ATS的时间推迟戳我查看

相关文章

  • iOS 适配https(AFNetworking3.0为例)

    1.准备证书 首先找后台要一个证书(SSL证书,一般你跟后台说要弄https,然后让他给你个证书,他就知道了),我...

  • iOS适配HTTPS

    一切为了迎合苹果 在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Stor...

  • iOS https适配

    首先,如果你的项目有很多的H5页面,并且用的还不是普通的静态页面,请保持 这样的设置,因为h5页面包含很多,并且有...

  • iOS适配Https

    由于苹果是17年的1月1日期审核要求强制开启ATS,所以各个应用的程序员都已经开始了https的适配。下面介绍一下...

  • ios https适配

    此处两个方法都值对服务端进行认证 如果需要客户端认证 请看参考链接*当前环境为 swift3.0 Xcode8...

  • iOS适配HTTPS

    自2017年1月1日起,提交到App Store的所有APP必须遵循ATS(App Transport Secur...

  • iOS 适配Https

    一、简单介绍下info.plist中的配置设置 NSAllowsArbitraryLoadsInMedia (设置...

  • iOS适配https

    http://my.oschina.net/non6/blog/290175

  • iOS https 适配

    http://blog.csdn.net/zhouzhoujianquan/article/details/525...

  • iOS HTTPS适配

    快速适配直接看下面的示例代码吧,概念有点多。。。 SSL/TLS协议运行机制概述图解SSL/TLS协议 一、单向认...

网友评论

  • 黄大爷小笙子:证书导入工程后 如果证书到期了 是不是要重新导入证书
  • 9九9:好久没搞AFN 正好 mark
  • NateLam:楼主, 请教一下, 我的后台叫我把接口url改一下即可, 不需要导入证书, 的确是成功请求到数据了, 但是ATS不打开依然无法成功请求数据, 那到时候宣布停用http, 我这样开着ATS会影响上线吗
    vision_colion:@NateLam 证书
    NateLam:@vision_colion 那请问, 怎么做才能在ATS设为NO的情况下, 通过审核
    vision_colion:到时候肯定会的,因为苹果是强推ATS,你设置为yes就是屏蔽了ATS
  • 瑞廷:如置为NO,建议自己添加对应域名的校验逻辑。 这个校验逻辑是怎么回事,该咋么改,一点都不懂,希望博主给说下,先谢了
    vision_colion:就是一个域名有没有子域名的关系
  • MangoJ:Allow Arbitrary Loads 设置为 NO NSLocalizedDescription=发生了 SSL 错误,无法建立与该服务器的安全连接 这是 我的证书配置有问题吗
    vision_colion:@MangoJ 应该是的
  • 二营长意大利炮呢:这个也就是说这样就可以使用AFNetworing 访问http的服务器
    vision_colion:@郭小糊 AFNetworing一直可以访问http的服务器啊
  • 69de80985ad6:楼主大人,你那个证书格式转换的指令没错吧,为什么我一直unable to load certificate PEM_read_bio:no start line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59.60.1/src/crypto/pem/pem_lib.c:648:Expecting: TRUSTED CERTIFICATE
    vision_colion:@lang小逸 应该是没错的啊,我自己就是这么转的
  • b96acac40a08:试过Alamofire的么
    vision_colion:@欲狼 抱歉,没试过,好惭愧,听都没听过
  • 天顾有情人_strive:大神 加下QQ吧 我这也准备换呢 有什么不懂请教一下
  • 管家頗:楼主,使用webView加载的http网页也要改吗,怎么改?是iOS端改还是web端改?
    vision_colion:@表歌 亲测了
    管家頗: @vision_colion 文中的方法楼主亲测过吗?
    vision_colion:@表歌 苹果的意思是要改的,应该算是服务器那边改吧,换个地址。因为我没做这个,所以不是很清楚,抱歉啦
  • 厚脸皮小强打不死的小强:如果要在我们自己的app内通过webView访问一个别人的,比如说京东,淘宝的http网页,那怎么办,能访问吗?
    vision_colion:@厚脸皮小强打不死的小强 按照苹果官方的意思应该是不能访问了,说是屏蔽所有http的资源,淘宝京东现在也都是https了
  • liuyan3176:ATS设置为YES了不是啥都没改变...
    苹果要求的不就是不能再无脑设为YES么
    liuyan3176:@vision_colion 也就是说,不管移动端有没有证书,买CA的还是自建的,不管是通过忽略证书(manager.securityPolicy.allowInvalidCertificates = YES;
    manager.securityPolicy.validatesDomainName = NO;)还是通过导入自建证书,只要所有请求改为https,就可以了吧
    liuyan3176:@vision_colion OK 非常感谢
    vision_colion:@liuyan3176 苹果要求的是https吧,是屏蔽所有http的资源
  • Tate_code:请问下,如果app里面嵌套的网页也要改成HTTPS吗?
    vision_colion:@Tate_zwt 要的,苹果说的是屏蔽所有http的资源
  • shushuzhen:厉害厉害 大神带带我
    vision_colion:@ssZhen :smile: :smile:
  • 一个很帅的蓝孩子:找后台要一个什么证书啊
    一个很帅的蓝孩子:@会疼的白痴 应该和第一步crt转cer类似吧
    会疼的白痴:怎么将后台给的csr文件转换成cer文件
    vision_colion:@一个很帅的蓝孩子 SSL证书

本文标题:iOS 适配https(AFNetworking3.0为例)

本文链接:https://www.haomeiwen.com/subject/vbalpttx.html