iOS如何将HTTP替换为HTTPS及SSL证书的申请与创建

      由于苹果的开发者大会召开后,对HTTPS进行了严格的规定,以前还可以通过在info.plist中添加Key值继续使用HTTP,不过在2017年1月1日就不可以了,所以我这也紧锣密鼓的开始张罗HTTPS了,其实一整也没什么,下面是个人整理HTTPS的心得,仅供参考!

      HTTPS无非分两种一种是像正规的颁发机构申请,另外一种就是自建证书!

      一、申请证书(不需要iOS 前端做任何事,工作都在后台)

1、有免费证书可以申请,这个木有弄,据说要三个月一更新,需要后台操点心了!

2、花钱买证书(https://ssl.do)我们是在这买的,感觉还算靠谱!进去买按他们提示的各种信息填写就好了,注册信息等你选好证书结账的时候会让你填一堆注册信息的,不过全程都是英文!这里说说买完之后的!

①要将你买的证书跟你的域名关联起来


这个CSR是由后台生成然后粘贴到这的,向我们买的这个证书只要有域名信息就OK了!

②在CSR上传成功后,填写一些管理员信息就可以直接点下一步了!

③点完下一步这个网站会让你选择相应的域名邮箱,验证一下这个域名确实属于你的,这是你要保证你有一个相对应的域名邮箱(例如:admin@baidu.com),一定要先保证你有这么个域名邮箱在点击发送确认邮件!

④邮箱内的操作


⑤在邮箱验证完之后,就可以回到你买证书的那个网站了,此时就已经将ssl证书配置完成了


⑥将如上信息给后台,让后台配置一下服务器就OK了!iOS要做的就是将原先的HTTP请求换成HTTPS了,是不是很爽,但是要注意一些图片的问题,我们以前上传的图片用的url都是HTTP的,要将这些url换成HTTPS的,最后将原先在工程中添加的Key值

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

删掉,看是否能够正常请求;如果可以那么恭喜你,到这算是彻底解决了!


    二、自建证书,参考(http://www.2cto.com/Article/201510/444706.html 

    一般这个都是自己的后台创建并发布的证书,这是证书只有你们自己承认,系统是不能默认信任他的,所以在网络iOS端在进行网络请求的时候要做些调整!

1、项目中的网络交互都是基于AFN,要求AFN版本在3.0及其以上; 

2、代码部分 

设置AFN请求管理者的时候添加 https ssl 验证。 

// ①.获得请求管理者 

AFHTTPSessionManager *manager =[AFHTTPSessionManager manager]; 

// ②.加上这个函数,https ssl 验证。 

[manager setSecurityPolicy:[selfcustomSecurityPolicy]]; 

// https ssl 验证函数 

- (AFSecurityPolicy *)customSecurityPolicy{ 

     

   // 先导入证书证书由服务端生成,具体由服务端人员操作 

   NSString *cerPath = [[NSBundle mainBundle]pathForResource:@"xxx" ofType:@"cer"];//证书的路径 

   NSData *cerData = [NSData dataWithContentsOfFile:cerPath]; 

     

   // AFSSLPinningModeCertificate 使用证书验证模式 

   AFSecurityPolicy *securityPolicy = [AFSecurityPolicypolicyWithPinningMode: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;  

     

   securityPolicy.pinnedCertificates = [[NSSet alloc]initWithObjects:cerData, nil nil]; 

     

   return securityPolicy; 

3、服务端给的是crt后缀的证书,其中iOS客户端用到的cer证书,是需要开发人员转换: 

①.证书转换 

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

 

openssl x509 -in 你的证书.crt -out你的证书.cer -outform der 

 

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

②.证书放入工程 

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

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

4、在info.plist去掉之前允许http加载的代码就是删除下面的代码

 <key>NSAppTransportSecurity</key> 

   <dict> 

 <key>NSAllowsArbitraryLoads</key> 

 <true/> 

   </dict>  


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值