AFNetwirking- AFSecurityPolicy

AFSecurityPolicy这个类其实就是为了验证证书是否正确

我们先来看看头文件里面的东西,要实现认证功能需要添加系统的Security,

#import <Foundation/Foundation.h>
#import <Security/Security.h>

typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {
    /**
     *  代表无条件信任服务器的证书
     */
    AFSSLPinningModeNone,

    /**
     *  代表会对服务器返回的证书中的PublicKey进行验证,通过则通过,否则不通过
     */
    AFSSLPinningModePublicKey,

    /**
     *  代表会对服务器返回的证书同本地证书全部进行校验,通过则通过,否则不通过
     */
    AFSSLPinningModeCertificate,
};
/**
 `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections.

 Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled.
 */

上面这段话说的是AFSecurityPolicy 用来评价通过X.509(数字证书的标准)的数字证书和公开密钥进行的安全网络连接是否值得信任。在应用内添加SSL证书能够有效的防止中间人的攻击和安全漏洞。强烈建议涉及用户敏感或隐私数据或金融信息的应用全部网络连接都采用使用SSL的HTTPS连接。

下面我们来看看AFSecurityPolicy中的属性和方法

// 返回SSL Pinning的类型。默认的是AFSSLPinningModeNone(无条件信任服务器的证书)。
@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode;

/*这个属性保存着所有的可用做校验的证书的集合。AFNetworking默认会搜索工程中所有.cer的证书文件。如果想制定某些证书,可使用certificatesInBundle在目标路径下加载证书,然后调用policyWithPinningMode:withPinnedCertificates创建一个本类对象。

 注意: 只要在证书集合中任何一个校验通过,evaluateServerTrust:forDomain: 就会返回true,即通过校验*/
@property (nonatomic, strong, nullable) NSSet <NSData *> *pinnedCertificates;

// 使用允许无效或过期的证书,默认是不允许。
@property (nonatomic, assign) BOOL allowInvalidCertificates;

 //是否验证证书中的域名domain
@property (nonatomic, assign) BOOL validatesDomainName;

 //返回指定bundle中的证书。如果使用AFNetworking的证书验证 ,就必须实现此方法,并且使用policyWithPinningMode:withPinnedCertificates 方法来创建实例对象。
+ (NSSet <NSData *> *)certificatesInBundle:(NSBundle *)bundle;

 /*默认的实例对象,默认的认证设置为:

 1. 不允许无效或过期的证书

 2. 验证domain名称

 3. 不对证书和公钥进行验证
 */
+ (instancetype)defaultPolicy;

//以下两个方法是创建security policy 的方法。
+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode;
+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet <NSData *> *)pinnedCertificates;

//核心方法:这个方法AFNetworking在内部调用了
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
                  forDomain:(nullable NSString *)domain;

 //使用起来是这样的;               
 /*AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

 AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init]; 
 [securityPolicy setAllowInvalidCertificates:NO]; 
 [securityPolicy setSSLPinningMode:AFSSLPinningModeCertificate]; 
 [securityPolicy setValidatesDomainName:YES];
 [securityPolicy setValidatesCertificateChain:NO]; 

 manager.securityPolicy = securityPolicy;*/

AFSecurityPolicy的属性和方法就基本介绍完了,由于iOS开发不久的我,还没有时间去深入研究其内部的实现,有兴趣的可以参考 AFNetworking 3.0 源码解读(二)之 AFSecurityPolicy, 也可以参考iOS 9之适配ATS很好的一篇文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值