AFNetWorking3 源码学习— AFSecurityPolicy

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

1 HTTPS以及SSL/TSL概念

SSL(Secure Sockets Layer, 安全套接字层),因为原先互联网上使用的HTTP协议是明文的,存在很多缺点,比如传输内容会被偷窥和篡改。SSL协议的作用就是在传输层对网络连接进行加密。

到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF就在那年把SSL标准化。标准化之后的名称改为 TLS(Transport Layer Security,传输层安全协议)。SSL与TLS可以视作同一个东西的不同阶段。

简单来说,HTTPS = HTTP + SSL/TLS, 也就是HTTP over SSL或HTTP over TLS,这是后面加S的由来。

HTTPS和HTTP异同:HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

2 证书准备

  1. 证书转换
    在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句。这样你就可以得到cer类型的证书了。双击,导入电脑。
// openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der 
  1. 证书放入工程
  • 可以直接把转换好的cer文件拖动到工程中。
  • 可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出.cer文件的证书了

3 代码准备

NSAppTransportSecurity
    
        NSAllowsArbitraryLoads
        
    

3 AFNetWorking 3.x版本支持HTTPS

  1. 支持https(校验证书,不可以抓包):
      // 1.初始化
     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.securityPolicy.SSLPinningMode = AFSSLPinningModeCertificate;
    // 2.设置证书模式
    NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];
    NSData * cerData = [NSData dataWithContentsOfFile:cerPath];
    manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:cerData, nil]];
    // 客户端是否信任非法证书
    mgr.securityPolicy.allowInvalidCertificates = YES;
    // 是否在证书域字段中验证域名
    [mgr.securityPolicy setValidatesDomainName:NO];
  1. 支持https(不校验证书,可以抓包查看):
     // 1.初始化
     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 2.设置非校验证书模式
    manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    manager.securityPolicy.allowInvalidCertificates = YES;
    [manager.securityPolicy setValidatesDomainName:NO];

你可能感兴趣的:(AFNetWorking3 源码学习— AFSecurityPolicy)