iOS AFNetworking SDWebImage HTTPS 请求

简介:

关于2017.1.1号前必须更换HTTPS的说法是谣传,仔细看下搜索结果的文章,都是卖证书的软文谣传出这个日期的,就此事咨询了Apple开发者计划支持给的结果:我了解您想知道有关 HTTPS 的问题,我为您查询过,我们的 WWDC 里有提及过 App Transport Security 要求 HTTPS。但目前为止,我们对于开发者上还没有这个规定,所以,暂时不须马上更改为 HTTPS。一旦有新的规定,我们一定会通知我们的开发者。

最新消息:Apple宣布延期HTTPS更改计划(暂未公布最后期限)

官网链接:https://developer.apple.com/news/?id=12212016b

当然,从去年到今年Apple不断在强调HTTPS的概念,想必不久后更改HTTPS也是趋势,小伙伴们可以先点个喜欢,关注下作者。作者会在后期持续的更新Apple关于HTTPS的相关动态!留着以后备用哦;

先简要说下,证书分两种:

1,自签证书

2,购买的权威ssl证书,大概一个域名一年2000左右,当然也有通配的更贵了;

认证方式也分两种:

1,单向

2,双向

证书相关:协议TLS v1.2 以上,安全等级AES-128 和 SHA-2 以及 ECDHC

如果公司是购买的权威SSL证书(现在有一部分云服务器提供商提供免费认证服务,所以不一定需要购买),那你什么都不用做,只需要把接口http改成https,删掉plist文件里 Allow Arbitrary Loads,到此,你可以点个关注和喜欢就可以关闭此网页了;怎么知道证书是否经过认证:把后台给你的测试链接用浏览器打开,如果有弹窗,一般就是自签的,不受信任的!不弹窗则是经过权威认证的,例如你打开百度,没有弹窗吧;

我这边测试是用的自签证书,单向认证。建议小伙伴们先和后台写个小 demo测试。下面讲下需要做的:

1,得到.crt证书

先给后台发过去这个:TLS v1.2 以上,AES-128 和 SHA-2 以及 ECDHC 等,什么东西呢?证书的安全等级以及一些算法要求之类的,好吧,我被坑了一回,因为后台给我的是 SHA-1,当然我也没提前跟他说。哈哈,然后请求各种不成功;

让后台给你.crt的证书,然后转换成.cer,进入证书所在目录,执行命令:

openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der

然后把.cer导入工程

删掉plist              Allow Arbitrary Loads

2,获取AFSecurityPolicy

+ (AFSecurityPolicy *)customSecurityPolicy

{

//先导入证书,找到证书的路径

NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"https" ofType:@"cer"];

NSData *certData = [NSData dataWithContentsOfFile:cerPath];

    NSLog(@"%@",certData);

//AFSSLPinningModeCertificate 使用证书验证模式

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

//allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO

securityPolicy.allowInvalidCertificates = YES;

//validatesDomainName 是否需要验证域名,默认为YES;

//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。

//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的;

//如置为NO,建议自己添加对应域名的校验逻辑。

securityPolicy.validatesDomainName = YES;

NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];

securityPolicy.pinnedCertificates = set;

return securityPolicy;

}


3,AFHTTPSessionManager(就是多加一句代码)

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

// 调用刚才的类方法,得到AFSecurityPolicy

[manager setSecurityPolicy:[YLNetworkingManager customSecurityPolicy]];

NSString *url = @"";

[manager POST:url parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

NSLog(@"%@",responseObject);

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];

NSLog(@"https:%@",dic);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"%@",error);

}];

好了,只不过是加几句代码,不要被网上众多的信息弄懵逼了 0.0,上面已经说了,先问后台是单向认证还是双向,然后证书是自签还是购买的,购买的你只需要把接口的http改成https,我这里是自签的单向认证的;如果有做双向认证的朋友可以参考以下链接:

双向认证:

afn_2.X版本:http://www.68idc.cn/help/jiabenmake/qita/20150508336834.html

afn_3.X版本:http://www.jianshu.com/p/9e573607be13

主要是梳理下,以防萌新蒙蔽,笔者新手上路,老司机勿喷...0.0,不对的还请留言;

SDWebImage 加载HTTPS链接图片

目前找到的方法是跳过验证。

[img sd_setImageWithURL:imgurl placeholderImage:nil options:SDWebImageAllowInvalidSSLCertificates];


你可能感兴趣的:(iOS AFNetworking SDWebImage HTTPS 请求)