AFSecurityPolicy提供以下功能:
1:创建安全策略
2:创建数字证书(客户端本地预置号的用来验证服务器的证书)
3:验证服务器证书的有效性
4:支持序列化
下面分逐个介绍这些功能:
AF提供的安全策略枚举值:
typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {
AFSSLPinningModeNone,//客户端本地预置证书不对服务器证书进行任何验证
AFSSLPinningModePublicKey,//客户端本地预置证书对服务器证书进行公钥验证
AFSSLPinningModeCertificate,//客户端本地预置证书不对服务器证书进行严格的证书验证
};
一:AF提供了3种创建安全策略的方法:
/**
默认完全策略, 不允许无效证书, 验证域名, 不验证固定证书或公共密钥
*/
+ (instancetype)defaultPolicy;
/**
使用指定的模式(AFSSLPinningMode)创建安全策略
*/
+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode;
/**
使用特定的模式和特定的证书创建安全策略集合
*/
+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet <NSData *> *)pinnedCertificates;
二:创建证书集合
/**
创建指定目录下面的证书集合
*/
+ (NSSet <NSData *> *)certificatesInBundle:(NSBundle *)bundle;
/**
当响应来自服务器身份验证的挑战时需要条用此方法根据安全策略来指定服务器信任是否应该被接受
@param serverTrust The X.509 certificate trust of the server. 符合X.509标准的服务器证书信任
@param domain 受信的服务域名,如果为空,此域名将不被验证
*/
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
forDomain:(nullable NSString *)domain;
四:序列化支持实现:NSSecureCoding 和 NSCopying协议:
NSSecureCoding:
+ (BOOL)supportsSecureCoding;
- (instancetype)initWithCoder:(NSCoder *)decoder;
- (void)encodeWithCoder:(NSCoder *)coder;
- (instancetype)copyWithZone:(NSZone *)zone
下篇将对以上几点详细的分析