期刊投稿查重率transport policy 期刊投稿查重率之前要查重么

Transportmetrica A-Transport Science 影响因子2.033,期刊投稿经验分享,Transportmetrica A-Transport Science主页,推荐审稿人、编辑,审稿周期/时间,Transportmetrica A-Transport Science impact factor(IF),版面费多少,中国作者发表文章,是几区,修改意见
美国ACCDON公司旗下品牌
新注册优惠
Transportmetrica A-Transport Science
2017年最新期刊SCI影响因子数据已经更新,欢迎查阅!
按期刊名首写字母查看
最新评论:
按研究方向查看:
Transportmetrica A-Transport Science期刊基本信息Hello,您是该期刊的第5375位访客
基本信息期刊名字TRANSPORTMETRICA A期刊ISSN最新影响因子2.033自引率29.00%期刊官方网站期刊投稿网址是否OA开放访问No通讯方式涉及的研究方向TRANSPORTATION SCIENCE & TECHNOLOGY-出版国家或地区PEOPLES R CHINA出版周期出版年份0年文章数48中科院SCI期刊分区( 2016最新版本)大类学科小类学科Top期刊工程技术 3区TRANSPORTATION SCIENCE & TECHNOLOGY运输科技4区非Top期刊SCI期刊coveragePubMed Central (PMC)链接平均审稿速度网友分享经验:平均录用比例网友分享经验:期刊常用信息链接
同领域相关期刊期刊近年影响因子趋势图该杂志上中国学者近期发表的论文 中科院JCR分区相关期刊
同类著名期刊名称
影响因子41.66739.73738.98631.14029.28021.69519.79117.47617.38217.188
同类热门点评期刊名称
点评数194180148146133130129124111110
我来预测明年: 稳步上升
逐渐下降  刷新
中国学者近期发表的论文暂无!
同大类学科的其他著名期刊名称
影响因子41.66739.73738.98631.14029.28021.69519.79117.47617.38217.188
同分区等级的其他期刊名称
影响因子14.7899.3268.1776.4026.2946.1436.0775.7255.6055.605
&&&&&&&&&&&&&&(第0/0页)
&&&&同领域作者分享投稿经验:
点评内容暂无评论! &&&&&&&&&&&&&&(第0/0页)
中国: LetPub上海分公司 沪ICP备号
United States: Tel: 1-781-202-9968 Address: 204 2nd Ave, Fl 1, Waltham, Massachusetts 02451Transportmetrica A-Transport Science 影响因子2.033,期刊投稿经验分享,Transportmetrica A-Transport Science主页,推荐审稿人、编辑,审稿周期/时间,Transportmetrica A-Transport Science impact factor(IF),版面费多少,中国作者发表文章,是几区,修改意见
美国ACCDON公司旗下品牌
新注册优惠
Transportmetrica A-Transport Science
2017年最新期刊SCI影响因子数据已经更新,欢迎查阅!
按期刊名首写字母查看
最新评论:
按研究方向查看:
Transportmetrica A-Transport Science期刊基本信息Hello,您是该期刊的第5377位访客
基本信息期刊名字TRANSPORTMETRICA A期刊ISSN最新影响因子2.033自引率29.00%期刊官方网站期刊投稿网址是否OA开放访问No通讯方式涉及的研究方向TRANSPORTATION SCIENCE & TECHNOLOGY-出版国家或地区PEOPLES R CHINA出版周期出版年份0年文章数48中科院SCI期刊分区( 2016最新版本)大类学科小类学科Top期刊工程技术 3区TRANSPORTATION SCIENCE & TECHNOLOGY运输科技4区非Top期刊SCI期刊coveragePubMed Central (PMC)链接平均审稿速度网友分享经验:平均录用比例网友分享经验:期刊常用信息链接
同领域相关期刊期刊近年影响因子趋势图该杂志上中国学者近期发表的论文 中科院JCR分区相关期刊
同类著名期刊名称
影响因子41.66739.73738.98631.14029.28021.69519.79117.47617.38217.188
同类热门点评期刊名称
点评数194180148146133130129124111110
我来预测明年: 稳步上升
逐渐下降  刷新
中国学者近期发表的论文暂无!
同大类学科的其他著名期刊名称
影响因子41.66739.73738.98631.14029.28021.69519.79117.47617.38217.188
同分区等级的其他期刊名称
影响因子14.7899.3268.1776.4026.2946.1436.0775.7255.6055.605
&&&&&&&&&&&&&&(第0/0页)
&&&&同领域作者分享投稿经验:
点评内容暂无评论! &&&&&&&&&&&&&&(第0/0页)
中国: LetPub上海分公司 沪ICP备号
United States: Tel: 1-781-202-9968 Address: 204 2nd Ave, Fl 1, Waltham, Massachusetts 02451您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
2014年电大《农业微生物学》期末考试小抄(最新整理版小抄).doc 7页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:80 &&
你可能关注的文档:
··········
菌毛:有些细菌表面在电镜下可见有较鞭毛短而细的丝状物,称为菌毛。菌毛包括性菌毛和普通菌毛两种
鞭毛:有些杆菌、弧菌及螺形菌的菌体上具附有细长、弯曲的丝状物,称为鞭毛。它是细菌的运动器官。
荚膜:有些细菌在细胞壁外存在被外多糖,如果其结构较好,不易洗掉则称之为荚膜。
质粒:游离于染色体之外,分散在细胞质中的能够自我复制的小型闭合环状DNA分子。
芽孢:细菌在一定条件细胞质高度浓缩脱水所形成的一种抗逆性很强的球形或椭圆形的休眠体。在形成芽孢的同时,会在芽孢旁形成一颗菱形或双锥形的的碱溶性蛋白晶体,称为伴孢晶体磷壁酸是革兰氏阳性(G+)菌细胞壁特殊组份,由核糖醇(Ribitol)或甘油(Glyocerol)残基经由磷酸二键互相连接而成的多聚物。脂多糖为革兰氏阴性细菌外璧层中特有的一种化学成分,分子量大于10000,结构复杂,在不同类群、甚至菌株之间都有差异。类囊体在叶绿体基质中,是单层膜围成的扁平小囊,也称为囊状结构薄膜。肽聚糖存在于原核生物细胞壁的大分子聚合物,是由乙酰氨基葡萄糖、乙酰胞壁酸与四五个氨基酸短肽聚合而成得多层网状大分子结构。存在于某些产甲烷细菌的细胞壁中肽聚糖类似物。不经过减数分裂而导致基因重组的一种生殖方式,常见于霉菌中。是由一个核酸分子(DNA或RNA)与蛋白质构成的非细胞形态的营寄生生活的生命体。类病毒是当今所知道的只含RNA一种核酸的最小的,专性细胞内寄生的分子生物。成熟的病毒感染单位,病毒复制的最后阶段,在宿主脂肪体细胞、血细胞和上皮细胞的核内复制,形成多边形和多角形的包含体,裸露或被囊膜包裹。包涵体即表达外源基因的宿主细胞Phage(噬菌体):噬菌体是感染细菌、真菌、放线菌或螺旋体等微生物的细菌病毒的总称,作为病毒的一种感染细菌后能使宿主细菌裂解死亡的一种噬菌体。温和噬菌体的基因组能与宿主菌基因组整合,并随细菌分裂传至子代细菌的基因组中,不引起细菌裂解。外毒素是指某些病原菌生长繁殖过程中分泌到菌体外的一种代谢产物,为次级代谢产物。内毒素是革兰氏阴性细菌细胞壁中的一种成分,叫做脂多糖。细菌即为原核生物是指一大类细胞核无核膜包裹,只存在称作拟核区(或拟核)的裸露DNA的原始单细胞生物菌体短小,弯曲成弧形,尾部带一鞭毛的革兰氏阴性菌。细菌在固体培养基接种线上由母细胞繁殖长成的一片密集的、具有一定形态结构特征的细菌群落,一般为大批菌落聚集而成。单个细菌(或其他微生物)细胞或一堆同种细胞在适宜固体培养基表面或内部生长繁殖到一定程度,形成肉眼可见的子细胞群落微生物(包括细菌、真菌、放线菌属)或高等动植物在生活过程中所产生的具有抗病原体或其它活性的一类次级代谢产物,能干扰其他生活细胞发育功能的化学物质。某些细菌分泌的肽抗生素,通常由质粒编码,吸附于敏感菌细胞表面特异受体连续培养又叫开放培养,是相对分批培养或密闭培养而言的。让微生物在某特定的环境中保持旺盛生长状态的培养方法.Minimal medium(基本培养基):仅能满足微生物野生型菌株生长需要的培养基凡可满足一切营养缺陷型菌株营养需要的天然或者半天然培养基凡是只能满足相应的营养缺陷型生长需要的组合培养基,成为补充培养基用来促进或抑制一定类型的生物体(如细胞或细菌等)而设计的培养基是典型异养生物菌根是指土壤中某些真菌与植物根的共生体。Auxotorph(营养缺陷型):因丧失合成某些生活必需物质的能力,不能在基本培养基上生长的,突变型菌株。营养缺陷型auxotroph 指微生物等不能在无机盐类和碳源组成的合成培养基中增殖,必须补充一种或一种以上的营养物质才能生长。Transformation(转化):细菌转化是一种常见的分子生物学技术,通过热激、冰浴、复苏等步骤后,把外源DNA转入细菌感受态细胞,使外源基因在宿主细菌胞内扩增、表达等。Transduction(转导):由噬菌体将一个细胞的基因传递给另一细胞的过程。它是细菌之间传递遗传物质的方式之一。Conjugation(接合):细菌通过细胞的暂时沟通和染色体转移而导致基因重组的过程。Point mutation(基因突变):由于核酸序列发生变化,包括缺失突变、定点突变、移框突变等,使之不再是原有基因的现象。Mutation breeding(诱变育种):在人为地条件下,利用物理,化学等因素,诱发生物产生突变,从中选择,培育成动植物和微生物地新品种生物体内复杂大分子降解成简单分子的物质代谢过程。细菌和酵母等微生物在无氧条件下,酶促降解糖分子产生能量的过程生物在有氧条件下进行呼吸,包括底物氧化及能量产生的代谢过程。生物在无氧条件下进行呼吸,包括底物氧化及能量产生的代谢过程。以细胞增长数目的对数做纵坐标,以培养时间做横坐标,绘制一条曲线消毒剂用于杀灭传播媒介上病原微生物,使其达到无害化要求抑制微生物的生长和繁殖具
正在加载中,请稍后...正确教育旗下网站
网校:8299所
24小时更新:2562
总量:5734354

2017届高考英语一轮复习考点真题演练:Section 14 完形填空之夹叙夹议文(含解析)
2017届高考英语一轮复习考点真题演练:Section 14 完形填空之夹叙夹议文(含解析)
资料类别:
所属学科:
适用地区:全国
所属版本:通用
资料类型:暂无
下载扣点:2点
上传时间: 11:14:10
下载量:33次
文档大小:712KB
所属资料:
文档预览文档简介为自动调取,可能会显示内容不完整,请您查看完整文档内容。
预览已结束,如需查看所有内容,请下载资料!
对不起,此页暂时无法预览!
官方微信公共账号
资源库-微信公众号【投稿】iOS 9之适配ATS
招聘信息:
本文为投稿文章,作者:liuchungui()iOS 9系统已经出来了,而网络方面的ATS(App Transport Security)特性可以说每个人都要经历。而我这篇博客,就是结合我最近几天的经历,来谈谈从服务器到iOS客户端对ATS的适配。一、简单谈谈ATS(App Transport Security)ATS(App Transport Security)是为了提高App与服务器之间安全传输数据一个特性,这个特性从iOS9和OSX10.11开始出现,它默认需要满足以下几个条件:服务器TLS版本至少是1.2版本连接加密只允许几种先进的加密证书必须使用SHA256或者更好的哈希算法进行签名,要么是2048位或者更长的RSA密钥,要么就是256位或更长的ECC密钥。如果想了解哪几种先进的加密是被允许的,详情请见官方文档二、搭建HTTPS服务器搭建HTTPS服务器有两种方式,一种是创建证书请求,然后到权威机构认证,随之配置到服务器;另外一种是自建证书,然后配置给服务器。第一种方式搭建的HTTPS服务器当然是最优的了,建立网站的话,直接就会被信任,而作为移动端app的服务器时,也不需要为ATS做过多的适配。虽然说权威的机构认证都是需要钱的,但是如今也不乏存在免费的第三方认证机构;第二种方式搭建的HTTPS服务器,对于网站来说完全不可行,用户打开时直接弹出一个警告提醒,说这是一个不受信任的网站,让用户是否继续,体验很差,而且让用户感觉网站不安全。对于移动端来说,在iOS9出现之前,这个没什么问题,但是在iOS9出来之后,第二种方式是通不过ATS特性,需要将NSAllowsArbitraryLoads设置为YES才行。所以,我推荐使用第一种方式搭建HTTPS服务器。下面,咱们来说说这两种方式都如何进行操作。第一种、使用CA机构认证的证书搭建HTTPS服务器1、创建证书请求,并提交给CA机构认证#生成私钥
openssl&genrsa&-des3&-out&private.key&2048
#生成服务器的私钥,去除密钥口令&
openssl&rsa&-in&private.key&-out&server.key
#生成证书请求
openssl&req&-new&-key&private.key&-out&server.csr将生成server.csr提交给CA机构,CA机构对它进行签名之后,然后会生成签名后的根证书和服务器证书发送给你,这个时候的证书就是CA认证之后的证书。我们这里将根证书和服务器证书分别改名为ca.crt和serve.crt。2、配置Apache服务器&将ca.crt、server.key、server.crt上传到阿里云服务器,使用SSH登陆进入这三个文件的目录,执行下面命令mkdir&ssl
cp&server.crt&/alidata/server/httpd/conf/ssl/server.crt
cp&server.key&/alidata/server/httpd/conf/ssl/server.key
cp&demoCA/cacert.pem&/alidata/server/httpd/conf/ssl/ca.crt
cp&-r&ssl&/alidata/server/httpd/conf/编辑/alidata/server/httpd/conf/extra/httpd-ssl.conf文件,找到SSLCertificateFile、SSLCertificateKeyFile、SSLCACertificatePath、SSLCACertificateFile进行修改:#&指定服务器证书位置
SSLCertificateFile&"/alidata/server/httpd/conf/ssl/server.crt"
#&指定服务器证书key位置
SSLCertificateKeyFile&"/alidata/server/httpd/conf/ssl/server.key"
#&证书目录
SSLCACertificatePath&"/alidata/server/httpd/conf/ssl"
#&根证书位置
SSLCACertificateFile&"/alidata/server/httpd/conf/ssl/ca.crt"修改vhost配置vim /alidata/server/httpd/conf/vhosts/phpwind.conf&&&&&&&&SSLCertificateFile&&&&/alidata/server/httpd/conf/ssl/server.crt
&&&&&&&&SSLCertificateKeyFile&/alidata/server/httpd/conf/ssl/server.key
&&&&&&&&SSLCACertificatePath&/alidata/server/httpd/conf/ssl
&&&&&&&&SSLCACertificateFile&/alidata/server/httpd/conf/ssl/ca.crt
&&&&&&&&ServerName&
&&&&&&&&DocumentRoot&/alidata/www最后,重启Apache服务器,在浏览器输入网址查看是否配置成功。我这里是个人使用,申请的是免费的证书,我申请证书的网站是。搭建的成果:第二种、自建证书配置HTTPS服务器请查看我的上一篇三、使用nscurl对服务器进行检测搭建完HTTPS服务器之后,可以使用nscurl命令来进行检测,查看建立的HTTPS服务器是否能通过ATS特性。nscurl&--ats-diagnostics&--verbose&如果HTTPS服务器能通过ATS特性,则上面所有测试案例都是PASS;如果某一项的Reuslt是FAIL,就找到ATS Dictionary来查看,就能知道HTTPS服务器不满足ATS哪个条件。 这里我前面碰到一个问题,就是自建证书的时候,通过此命令进行测试时,发现Result全是FAIL,而且在iOS的代码测试中也出现了一个很奇怪的现象,就是相同的代码,在iOS8.4请求数据完全正常,但是在iOS9上,直接是连接失败。最终发现,其实就是因为自建证书不受信任,是通不过ATS的,除非将NSAllowsArbitraryLoads设置为YES。四、iOS客户端在上面的第二大步骤当中,HTTPS服务器满足ATS默认的条件,而且SSL证书是通过权威的CA机构认证过的,那么我们在使用Xcode7开发的时候,对网络的适配什么都不用做,我们也能正常与服务器通信。但是,当我们对安全性有更高的要求时或者我们自建证书时,我们需要本地导入证书来进行验证。那么,如何本地导入证书进行验证呢?&在这里先提一下,由于iOS客户端支持的证书是DER格式的,我们需要创建客户端证书。创建客户端证书,直接将服务端的CA根证书导出成DER格式就行。openssl&&x509&&-inform&PEM&&-outform&DER&-in&ca.crt&-out&ca.cer导入完证书之后,我们分别来说说使用NSURLSession和AFNetworking来进行本地验证。首先,来说说使用NSURLSession验证验证步骤如下:&导入CA根证书到工程中,即我们创建的ca.cer&获取trust object,通过SecCertificateCreateWithData方法读取导入的证书的数据生成一个证书对象,然后通过SecTrustSetAnchorCertificates 设置这个证书为trust object的信任根证书(trusted anchor)通过SecTrustEvaluate方法去验证trust object&下面是主要OC实现代码,Demo工程我也放在github上了,有OC和Swift两种语言,下载Demo请点击。-&(void)viewDidLoad&{
&&&&[super&viewDidLoad];
&&&&//导入客户端证书
&&&&NSString&*cerPath&=&[[NSBundle&mainBundle]&pathForResource:@"ca"&ofType:@"cer"];
&&&&NSData&*data&=&[NSData&dataWithContentsOfFile:cerPath];
&&&&SecCertificateRef&certificate&=&SecCertificateCreateWithData(NULL,&(__bridge&CFDataRef)&data);
&&&&self.trustedCerArr&=&@[(__bridge_transfer&id)certificate];
&&&&//发送请求
&&&&NSURL&*testURL&=&[NSURL&URLWithString:@"/web/test/demo.php"];
&&&&NSURLSession&*session&=&[NSURLSession&sessionWithConfiguration:[NSURLSessionConfiguration&defaultSessionConfiguration]&delegate:self&delegateQueue:[NSOperationQueue&mainQueue]];
&&&&NSURLSessionDataTask&*task&=&[session&dataTaskWithRequest:[NSURLRequest&requestWithURL:testURL]];
&&&&[task&resume];
&&&&//&Do&any&additional&setup&after&loading&the&view,&typically&from&a&nib.
#pragma&mark&-&NSURLSessionDelegate
-&(void)URLSession:(NSURLSession&*)session&didReceiveChallenge:(NSURLAuthenticationChallenge&*)challenge
&completionHandler:(void&(^)(NSURLSessionAuthChallengeDisposition&disposition,&NSURLCredential&*&__nullable&credential))completionHandler{
&&&&OSStatus&
&&&&NSURLSessionAuthChallengeDisposition&disposition&=&NSURLSessionAuthChallengePerformDefaultH
&&&&SecTrustResultType&&trustResult&=&kSecTrustResultI
&&&&NSURLCredential&*credential&=&
&&&&//获取服务器的trust&object
&&&&SecTrustRef&serverTrust&=&challenge.protectionSpace.serverT
&&&&//将读取的证书设置为serverTrust的根证书
&&&&err&=&SecTrustSetAnchorCertificates(serverTrust,&(__bridge&CFArrayRef)self.trustedCerArr);
&&&&if(err&==&noErr){
&&&&&&&&//通过本地导入的证书来验证服务器的证书是否可信,如果将SecTrustSetAnchorCertificatesOnly设置为NO,则只要通过本地或者系统证书链任何一方认证就行
&&&&&&&&err&=&SecTrustEvaluate(serverTrust,&&trustResult);
&&&&if&(err&==&errSecSuccess&&&&(trustResult&==&kSecTrustResultProceed&||&trustResult&==&kSecTrustResultUnspecified)){
&&&&&&&&//认证成功,则创建一个凭证返回给服务器
&&&&&&&&disposition&=&NSURLSessionAuthChallengeUseC
&&&&&&&&credential&=&[NSURLCredential&credentialForTrust:serverTrust];
&&&&&&&&disposition&=&NSURLSessionAuthChallengeCancelAuthenticationC
&&&&//回调凭证,传递给服务器
&&&&if(completionHandler){
&&&&&&&&completionHandler(disposition,&credential);
}注意:&1、SecTrustSetAnchorCertificates方法会设置一个标示去屏蔽trust object对其它根证书的信任;如果你也想信任系统默认的根证书,请调用SecTrustSetAnchorCertificatesOnly方法,清空这个标示(设置为NO) 2、验证的方法不仅仅只有这一种,更多的验证方法,请参考下面,来谈谈AFNetworking是如何验证的,我们如何使用AFNetworking。AFNetworking的证书验证工作是由AFSecurityPolicy来完成的,所以这里我们主要来了解一下AFSecurityPolicy。注意:我这里使用的是AFNetworking2.6.0,它跟2.5.0是有区别的。说到AFSecurityPolicy,我们必须要提到它三个重要的属性,如下:@property&(readonly,&nonatomic,&assign)&AFSSLPinningMode&SSLPinningM
@property&(nonatomic,&assign)&BOOL&allowInvalidC
@property&(nonatomic,&assign)&BOOL&validatesDomainNSSLPingMode是最重要的属性,它标明了AFSecurityPolicy是以何种方式来验证。它是一个枚举类型,这个枚举类型有三个值,分别是AFSSLPinningModeNone、AFSSLPinningModePublicKey、AFSSLPinningModeCertificate。其中,AFSSLPinningModeNone代表了AFSecurityPolicy不做更严格的验证,只要是系统信任的证书就可以通过验证,不过,它受到allowInvalidCertificates和validatesDomainName的影响;AFSSLPinningModePublicKey是通过比较证书当中公钥(PublicKey)部分来进行验证,通过SecTrustCopyPublicKey方法获取本地证书和服务器证书,然后进行比较,如果有一个相同,则通过验证,此方式主要适用于自建证书搭建的HTTPS服务器和需要较高安全要求的验证;AFSSLPinningModeCertificate则是直接将本地的证书设置为信任的根证书,然后来进行判断,并且比较本地证书的内容和服务器证书内容是否相同,来进行二次判断,此方式适用于较高安全要求的验证。&allowInvalidCertificates属性代表是否允许不信任的证书通过验证,默认为NO。validatesDomainName属性代表是否验证主机名,默认为YES。接下来,我们说下验证流程。验证流程主要放在AFSecurityPolicy的- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain方法当中。-&(BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
&&&&&&&&&&&&&&&&&&forDomain:(NSString&*)domain
&&&&//当使用自建证书验证域名时,需要使用AFSSLPinningModePublicKey或者AFSSLPinningModeCertificate
&&&&if&(domain&&&&self.allowInvalidCertificates&&&&self.validatesDomainName&&&&(self.SSLPinningMode&==&AFSSLPinningModeNone&||&[self.pinnedCertificates&count]&==&0))&{
&&&&&&&&NSLog(@"In&order&to&validate&a&domain&name&for&self&signed&certificates,&you&MUST&use&pinning.");
&&&&&&&&return&NO;
&&&&NSMutableArray&*policies&=&[NSMutableArray&array];
&&&&//需要验证域名时,需要添加一个验证域名的策略
&&&&if&(self.validatesDomainName)&{
&&&&&&&&[policies&addObject:(__bridge_transfer&id)SecPolicyCreateSSL(true,&(__bridge&CFStringRef)domain)];
&&&&}&else&{
&&&&&&&&[policies&addObject:(__bridge_transfer&id)SecPolicyCreateBasicX509()];
&&&&//设置验证的策略,可以是多个
&&&&SecTrustSetPolicies(serverTrust,&(__bridge&CFArrayRef)policies);
&&&&//SSLPinningMode为AFSSLPinningModeNone时,allowInvalidCertificates为YES,则代表服务器任何证书都能验证通过;如果它为NO,则需要判断此服务器证书是否是系统信任的证书
&&&&if&(self.SSLPinningMode&==&AFSSLPinningModeNone)&{
&&&&&&&&if&(self.allowInvalidCertificates&||&AFServerTrustIsValid(serverTrust)){
&&&&&&&&&&&&return&YES;
&&&&&&&&}&else&{
&&&&&&&&&&&&return&NO;
&&&&}&else&if&(!AFServerTrustIsValid(serverTrust)&&&&!self.allowInvalidCertificates)&{
&&&&&&&&return&NO;
&&&&//获取服务器证书的内容
&&&&NSArray&*serverCertificates&=&AFCertificateTrustChainForServerTrust(serverTrust);
&&&&switch&(self.SSLPinningMode)&{
&&&&&&&&case&AFSSLPinningModeNone:
&&&&&&&&default:
&&&&&&&&&&&&return&NO;
&&&&&&&&case&AFSSLPinningModeCertificate:&{
&&&&&&&&&&&&//AFSSLPinningModeCertificate是直接将本地的证书设置为信任的根证书,然后来进行判断,并且比较本地证书的内容和服务器证书内容是否相同,如果有一个相同则返回YES
&&&&&&&&&&&&
&&&&&&&&&&&&NSMutableArray&*pinnedCertificates&=&[NSMutableArray&array];
&&&&&&&&&&&&for&(NSData&*certificateData&in&self.pinnedCertificates)&{
&&&&&&&&&&&&&&&&[pinnedCertificates&addObject:(__bridge_transfer&id)SecCertificateCreateWithData(NULL,&(__bridge&CFDataRef)certificateData)];
&&&&&&&&&&&&}
&&&&&&&&&&&&//设置本地的证书为根证书
&&&&&&&&&&&&SecTrustSetAnchorCertificates(serverTrust,&(__bridge&CFArrayRef)pinnedCertificates);
&&&&&&&&&&&&
&&&&&&&&&&&&//通过本地的证书来判断服务器证书是否可信,不可信,则验证不通过
&&&&&&&&&&&&if&(!AFServerTrustIsValid(serverTrust))&{
&&&&&&&&&&&&&&&&return&NO;
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&&&&&//判断本地证书和服务器证书的内容是否相同
&&&&&&&&&&&&NSUInteger&trustedCertificateCount&=&0;
&&&&&&&&&&&&for&(NSData&*trustChainCertificate&in&serverCertificates)&{
&&&&&&&&&&&&&&&&if&([self.pinnedCertificates&containsObject:trustChainCertificate])&{
&&&&&&&&&&&&&&&&&&&&trustedCertificateCount++;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&return&trustedCertificateCount&>&0;
&&&&&&&&case&AFSSLPinningModePublicKey:&{
&&&&&&&&&&&&//AFSSLPinningModePublicKey是通过比较证书当中公钥(PublicKey)部分来进行验证,通过SecTrustCopyPublicKey方法获取本地证书和服务器证书,然后进行比较,如果有一个相同,则通过验证
&&&&&&&&&&&&NSUInteger&trustedPublicKeyCount&=&0;
&&&&&&&&&&&&NSArray&*publicKeys&=&AFPublicKeyTrustChainForServerTrust(serverTrust);
&&&&&&&&&&&&//判断服务器证书的公钥与本地的证书公钥是否相同,相同则客户端认证通过
&&&&&&&&&&&&for&(id&trustChainPublicKey&in&publicKeys)&{
&&&&&&&&&&&&&&&&for&(id&pinnedPublicKey&in&self.pinnedPublicKeys)&{
&&&&&&&&&&&&&&&&&&&&if&(AFSecKeyIsEqualToKey((__bridge&SecKeyRef)trustChainPublicKey,&(__bridge&SecKeyRef)pinnedPublicKey))&{
&&&&&&&&&&&&&&&&&&&&&&&&trustedPublicKeyCount&+=&1;
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&return&trustedPublicKeyCount&>&0;
&&&&return&NO;
}说了验证流程,我们最后来看看AFNetworking怎么使用,代码如下:&_httpClient&=&[[BGAFHTTPClient&alloc]&initWithBaseURL:[NSURL&URLWithString:baseURL]];
&AFSecurityPolicy&*policy&=&[AFSecurityPolicy&policyWithPinningMode:AFSSLPinningModeCertificate];
&//是否允许CA不信任的证书通过
policy.allowInvalidCertificates&=&YES;
//是否验证主机名
policy.validatesDomainName&=&YES;
_httpClient.securityPolicy&=&这里我就没有建立Demo了,如果要看的话,可以看看我写的一个框架,里面的Demo对ATS进行了适配,AFNetworking的使用放在BGNetworkConnector类里面的- (instancetype)initWithBaseURL:(NSString *)baseURL delegate:(id)delegate初始化方法中。五、适配ATS前面的内容讲述都是满足ATS特性的情况,但若是服务器是自建证书搭建的,或者TLS版本是1.0的话,服务器又不能轻易改动,那么我们客户端如何适配呢? 不急,我们可以在工程中的Info.plist文件当中进行设置,主要参照下图:如果是自建证书,没有经过权威机构认证的证书,那么需要将NSAllowsArbitraryLoads设置为YES才能通过。NSAllowsArbitraryLoads为YES,以前的HTTP请求也能通过。如果是认证过的证书,那么可以通过nscurl --ats-diagnostics --verbose 这样的命令来查看服务器支持的ATS Dictionary,然后进行对应的设置。适配的部分,也可以参照总结回顾前面的内容,总结一下,主要讲了一下几点内容:ATS需要满足的条件&如何建立证书,搭建HTTPS服务器&使用nscurl命令来检测HTTPS服务器是否满足ATS特性&客户端的适配,讲述了NSURLSession和AFNetworking的使用&讲述了如果建立的服务器不满足ATS的条件时,我们如何适配参考&&
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量5346点击量5146点击量5092点击量4946点击量3811点击量3718点击量3519点击量2880点击量2672
&2016 Chukong Technologies,Inc.
京公网安备89

我要回帖

更多关于 投稿之前要不要查重 的文章

 

随机推荐