简介:
关于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];