IOS开发支持https请求以及ssl证书配置详解

  

<强> IOS开发支持https请求以及ssl证书配置详解

  

<强>前言:

  

众所周知,苹果有言,从2017年开始,将屏蔽http的资源,强推https
  

  

楼主正好近日将http转为https,给还没动手的朋友分享一二

  

<强>一、证书准备

  

1,证书转换

  

在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句
  

  

//openssl x509——你的证书。crt治疗你的证书。cer -outform der
  

  

这样你就可以得到cer类型的证书了。双击,导入电脑。

  

2,证书放入工程

  

1,可以直接把转换好的cer文件拖动到工程中。
  

  

2,可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出c文件的证书了

  

<强>二、代码准备

        & lt; key> NSAppTransportSecurity   & lt; dict>   & lt; key> NSAllowsArbitraryLoads   & lt;真实/比;   & lt;/dict>   之前      

1.1 NSURLConnection设置支持https。

  

在2015年iOS9的更新中,NSURLConnection被废弃由NSURLSession取代,所以本身是不建议大家继续用这个类做网络请求的(同样也有AFNetWorking 2. x版本),但是考虑到一些旧程序,也不能说改就改,说替换就替换的,所以还是需要普及一下,如果用到了NSURLConnection你需要怎么做。

  

代码如下:

        - (void)连接:(NSURLConnection *)连接willSendRequestForAuthenticationChallenge: {(NSURLAuthenticationChallenge *)挑战      如果(challenge.protectionSpace。authenticationMethod==NSURLAuthenticationMethodServerTrust) {//告诉服务器,客户端信任证书//创建凭据对象   NSURLCredential * credntial=[NSURLCredential credentialForTrust challenge.protectionSpace.serverTrust):;//告诉服务器信任证书   (挑战。发送方useCredential: credntial forAuthenticationChallenge:挑战);   }   }      之前      

你只需要简单的,添加上如上的代理方法,就可以在不影响你原有请求的基础上,增加了https请求的支持了。

  

<强> 1.2 NSURLSession设置支持https。

  

现在推荐使用的就是NSURLSession来处理相关的网络请求了,如果使用系统自带的类,可以参考如下代码:

        - (void) URLSession: (NSURLSession *)会话任务:(NSURLSessionTask *)任务didReceiveChallenge: completionHandler (NSURLAuthenticationChallenge *)挑战:(空白(^)(NSURLSessionAuthChallengeDisposition性格,NSURLCredential * __nullable凭据)completionHandler {//判断是否是信任服务器证书   如果(challenge.protectionSpace。authenticationMethod==NSURLAuthenticationMethodServerTrust) {//告诉服务器,客户端信任证书//创建凭据对象   NSURLCredential * credntial=[NSURLCredential credentialForTrust challenge.protectionSpace.serverTrust):;//通过completionHandler告诉服务器信任证书   completionHandler (NSURLSessionAuthChallengeUseCredential credntial);   }   NSLog (@“protectionSpace=% @”challenge.protectionSpace);   }      之前      

<强> 2。使用AFNetWorking发送网络请求篇

  

AFNetworking是一个讨人喜欢的网络库,适用于iOS以及Mac OS x它构建于在NSURLConnection, NSOperation,以及其他熟悉的基础技术之上。它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松. .

  

2.1 AFNetWorking 2. x版本

  

考虑到这个版本,我们还可以使用AFHTTPRequestOperationManager这个类来处理网络请求,所以我们要做的就是给这个类,设置一些参数,让它可以支持https的请求,代码如下:
  

  

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

     //1 .初始化单例类   AFHTTPRequestOperationManager *经理=(AFHTTPRequestOperationManager经理);   mgr.securityPolicy。SSLPinningMode=AFSSLPinningModeCertificate;//2 .设置证书模式   NSString * cerPath=[[NSBundle mainBundle] pathForResource: @减低:“xxx”@“陶瓷”);   NSData * cerData=https://www.yisu.com/zixun/[NSData dataWithContentsOfFile cerPath):;   mgr.securityPolicy。pinnedCertificates=[[NSArray alloc] initWithObjects: cerData, nil);//客户端是否信任非法证书   mgr.securityPolicy。allowInvalidCertificates=是的;//是否在证书域字段中验证域名   (经理securityPolicy setValidatesDomainName:没有);   之前      

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

     //1 .初始化单例类   AFHTTPRequestOperationManager *经理=(AFHTTPRequestOperationManager经理);   mgr.securityPolicy。SSLPinningMode=AFSSLPinningModeCertificate;//2 .设置非校验证书模式   经理securityPolicy=[AFSecurityPolicy policyWithPinningMode AFSSLPinningModeNone):;   mgr.securityPolicy。allowInvalidCertificates=是的;   (经理securityPolicy setValidatesDomainName:没有);   

IOS开发支持https请求以及ssl证书配置详解