iOS之hHTTPS的使用

来源:互联网 发布:组合楼板计算软件 编辑:程序博客网 时间:2024/06/05 02:21

参考:http://www.jianshu.com/p/97745be81d64

http://www.cocoachina.com/ios/20150810/12947.html

iOS9推出的时候,苹果希望大家使用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];


原创粉丝点击