IOS之https请求认证及双向认证

本文介绍了在iOS应用中强制使用HTTPS的背景,解释了HTTPS的基本原理,并详细阐述了使用AFNetworking库进行HTTPS请求时的证书配置和安全策略设置。包括从.crt文件导出.cer证书,将其导入项目,创建自定义安全策略,以及在AFNetworking中应用该策略的过程。同时提到了使用Charles工具进行抓包验证请求和响应的加密情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景:

苹果从IOS9.0以后就要求使用https,今年发布说的是在2017年1月1日后,所有上架的APP必须使用HTTPS(貌似目前推迟了)。不论怎么说,使用https时迟早的事情,之前通过在info.plist文件中设置 NSAppTransportSecurity为NSAllowsArbitraryLoads的方式不起作用了。这篇文章主要就是介绍在IOS中如何将http改造成https。

二、关于https:

可以简单的理解https就是http的安全版本,https实质是http+SSL;就在http请求的基础上加上一层安全措施,这样抓包工具抓到的数据显示的就是乱码,而不是明文方式了。

三、IOS中的AFNetworking使用https:

1.需要服务端提供认证证书.crt文件,然后自己导出成.cer文件

2.将导出的cer证书加入到项目中,注意勾选相应的target不然可能获取证书路径为nil

3.通过cer证书生成证书校验的安全策略

4.在AFNetworking的网络请求中设置安全策略:[_operationManager setSecurityPolicy:[CertificatehttpsTools customSecurityPolicy]];

5.通过抓包工具Charles检验请求和返回的内容是否加密

证书校验安全策略的工具类:

    #import <Foundation/Foundation.h>
    #import "AFNetworking.h"
     
    @interface HttpsCertificateTools : NSObject
     
     
    /**
     自定义证书安全策略
     
     @return 返回自定义的证书安全策略
     */
    + (AFSecurityPolicy*)customSecurityPolicy;
     
    @end
    #import "HttpsCertificateTools.h"
     
    @implementation HttpsCertificateTools
     
    + (AFSecurityPolicy*)customSecurityPolicy{
   
   
        // /先导入证书
        NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"服务端证书名称" ofType:@"cer"];//证书的路径
        NSData *certData = [NSData dataWithContentsOfFile:cerPath];
        //    NSString *aString = [[NSString alloc] initWithData:certData encoding:NSUTF8StringEncoding];
        
        // AFSSLPinningModeCertificate 使用证书验证模式
        //    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
        // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
        // 如果是需要验证自建证书,需要设置为YES
        securityPolicy.allowInvalidCertificates = YES;
        
                                      更多免费的Python学习资料
    
                                           进QQ群  688244617
   
                                     群里还有小伙伴跟你一起交流学习


        //validatesDomainName 是否需要验证域名,默认为YES;
        //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值