美文网首页iOS
iOS https的使用

iOS https的使用

作者: 打不死的小怪兽 | 来源:发表于2018-04-23 13:52 被阅读233次

由于苹果规定2017年1月1日以后,所有APP都要使用HTTPS进行网络请求,否则无法上架,因此研究了一下在iOS中使用HTTPS请求的实现。相信大家对HTTPS都或多或少有些了解,这里我就不再介绍了,主要功能就是将传输的报文进行加密,提高安全性。

一、简介

二、HTTPS与HTTP的区别

  • 这里用两张图来介绍两者的区别:
    HTTP:当客户端发送请求,那么服务器会直接返回数据。


    HTTP

    HTTPS:当客户端第一次发送请求的时候,服务器会返回一个包含公钥的受保护空间(也成为证书),当我们发送请求的时候,公钥会将请求加密再发送给服务器,服务器接到请求之后,用自带的私钥进行解密,如果正确再返回数据。这就是 HTTPS 的安全性所在。


    HTTPS

三、分类

四、证书准备

证书分为两种,一种是花钱向认证的机构购买的证书,服务端如果使用的是这类证书的话,那一般客户端不需要做什么,用HTTPS进行请求就行了,苹果内置了那些受信任的根证书的。另一种是自己制作的证书,使用这类证书的话是不受信任的(当然也不用花钱买),因此需要我们在代码中将该证书设置为信任证书。

1.证书转换

在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句
openssl x509 -in 你的证书.crt -out你的证书.cer -outform der
这样你就可以得到cer类型的证书了。双击,导入电脑。

2.证书放入工程

(1)、可以直接把转换好的cer文件拖动到工程中。
(2)、可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出.cer文件的证书了

=======修改info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

====AFN 支持https(校验证书,不可以抓包):

// 1.初始化单例类
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 注意写法的变化
manager.securityPolicy=  [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

AFSSLPinningModeNone 这个模式表示不做 SSL pinning,只跟浏览器一样在系统的信任机构列表里验证服务端返回的证书。若证书是信任机构签发的就会通过,若是自己服务器生成的证书,这里是不会通过的。
AFSSLPinningModeCertificate 这个模式表示用证书绑定方式验证证书,需要客户端保存有服务端的证书拷贝,这里验证分两步,第一步验证证书的域名/有效期等信息,第二步是对比服务端返回的证书跟客户端返回的是否一致。
AFSSLPinningModePublicKey 这个模式同样是用证书绑定方式验证,客户端要有服务端的证书拷贝,只是验证时只验证证书里的公钥,不验证证书的有效期等信息。只要公钥是正确的,就能保证通信不会被窃听,因为中间人没有私钥,无法解开通过公钥加密的数据。

// 2.设置证书模式
NSString * cerPath = [[NSBundlemainBundle]pathForResource:@"xxx"ofType:@"cer"];
NSData * cerData = [NSDatadataWithContentsOfFile:cerPath];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:cerData,nil]];
// 客户端是否信任非法证书
manager.securityPolicy.allowInvalidCertificates = YES;
// 是否在证书域字段中验证域名
[manager.securityPolicy setValidatesDomainName:NO];

=====AFN 支持https(不校验证书,可以抓包查看):

// 1.初始化单例类
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.设置非校验证书模式
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
manager.securityPolicy.allowInvalidCertificates = YES;
[manager.securityPolicy setValidatesDomainName:NO];

相关文章

  • iOS https的使用

    由于苹果规定2017年1月1日以后,所有APP都要使用HTTPS进行网络请求,否则无法上架,因此研究了一下在iOS...

  • iOS 中HTTPS 的使用

    谣言四起,大限将至。各种谣言皆因苹果开发者大会开始,从那个时间开始,都说2017年1月1日为HPPTS即将开始的日...

  • iOS App使用HTTPS

    Apple 为啥要强制使用HTTPS,在这里我不探讨,请自行Google或者度娘。我在这里说说我们怎么去适配这条规...

  • ios HTTPS使用理解:

    原文地址:iOS安全系列之一:HTTPS 如何打造一个安全的App?这是每一个移动开发者必须面对的问题。在移动Ap...

  • iOS AFNetworking 使用 HTTPS

    听说?在2017年1月1日将强制使用https不知真假???不管怎样先用用吧。如果你的后台开始用https了,前端...

  • iOS(NSPredicate) 谓词的使用

    参考iOS-谓词的使用详解[https://#]NSPredicate 谓词[https://#] NSPredi...

  • iOS中JSONModel的使用

    iOS中JSONModel的使用 Adding JSONModel to your project (https:...

  • iOS - sortedArrayUsingComparator

    iOS - sortedArrayUsingComparator和compare配合使用[https://www....

  • iOS 中 AFNetworking HTTPS 的使用

    原文链接 遇到的问题: 错误一、AFNetWorking下http改https后遇到出现Error Domain=...

  • iOS 中 AFNetworking HTTPS 的使用

    由于我们公司由HTTP转HTTPS,出现了一系列问题特此记录下。 一、HTTPS 二、App Transport ...

网友评论

    本文标题:iOS https的使用

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