博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 适配https
阅读量:5364 次
发布时间:2019-06-15

本文共 2551 字,大约阅读时间需要 8 分钟。

 

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的类方法    ···后面的就还是一样了

12.2 纠正,

NSAllowsArbitraryLoads,默认值为NO,置为YES后,所有网络请求不受ATS的限制;

NSAllowsArbitraryLoadsInMedia,默认值为NO,置为YES后,使用AV Foundation框架载入资源时不受ATS的限制;(iOS 10.0及以上支持)
NSAllowsArbitraryLoadsInWebContent,默认值为NO,置为YES后,使用web view的网络请求不受ATS限制;(iOS 10.0及以上支持)
NSAllowsLocalNetworking,默认值为NO,置为YES后,本地网络请求不受ATS限制;(iOS 10.0及以上支持)
NSExceptionDomains,配置特定域名的ATS访问属性
NSIncludesSubdomains,默认值为NO,置为YES后,该域名的ATS配置适用于其子域名;
NSExceptionAllowsInsecureHTTPLoads,默认值为NO,置为YES后,该域名可通过HTTP请求访问但TLS版本要求不会改变;
NSExceptionMinimumTLSVersion,默认值为TLSv1.2,设置该域名支持的TLS最低版本,有效值:TLSv1.0、TLSv1.1和TLSv1.2;
NSExceptionRequiresForwardSecrecy,默认值为YES,置为NO后,访问该域名时TLS ciphers可以不支持完全正向保密(PFS);
NSRequiresCertificateTransparency,默认值为NO,置为YES后,访问该域名时服务器证书需要有效的SCT(signed Certificate timestamps)。
【注意】NSAllowsArbitraryLoads、NSAllowsArbitraryLoadsInMedia、NSAllowsArbitraryLoadsInWebContent和NSExceptionAllowsInsecureHTTPLoads任一属性置为YES或设置NSExceptionMinimumTLSVersion,都会触发App Store的额外审核并需要提交对应说明(详情见2.3节)。

 

 

原文鏈接:http://www.jianshu.com/p/674d4fb14f38

转载于:https://www.cnblogs.com/-yun/p/6168719.html

你可能感兴趣的文章
20151121
查看>>
线段重叠 (思维好题)
查看>>
Codeforces Round #413 C. Fountains (线段树的创建、查询、更新)
查看>>
SBuild 0.1.5 发布,基于 Scala 的构建系统
查看>>
WordPress 3.5 RC3 发布
查看>>
DOM扩展札记
查看>>
primitive assembly
查看>>
根据经纬度查询位置百度api
查看>>
浅谈localStorage的用法
查看>>
Ad Exchange基本接口和功能
查看>>
Angular ui-router的常用配置参数详解
查看>>
软考知识点梳理--项目评估
查看>>
把特斯拉送上火星的程序员,马斯克!
查看>>
三测单
查看>>
MyBatis 缓存
查看>>
SQL中left outer join与inner join 混用时,SQL Server自动优化执行计划
查看>>
mac下python实现vmstat
查看>>
jxl.dll操作总结
查看>>
成员函数对象类的const和非const成员函数的重载
查看>>
机器学习实战-----八大分类器识别树叶带源码
查看>>