美文网首页
iOS 用AFN与后台双向https证书验证

iOS 用AFN与后台双向https证书验证

作者: panda_熊猫 | 来源:发表于2017-11-28 10:12 被阅读321次

    iOS常规的https单向验证不需要客户端做处理,但是客户端与服务端双向验证则需要客户端注入证书再请求。
    1.先将pem证书安装至钥匙串,然后到处cer格式的证书
    2.将cer证书拖入项目中
    3.在AFN请求时注入证书
    **

    • (AFSecurityPolicy*)customSecurityPolicy {
    // /先导入证书  
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxxxx ofType:@"cer"];//证书的路径  
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];  
    // AFSSLPinningModeCertificate 使用证书验证模式  
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode: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 setWithObject:certData];  
      
    return securityPolicy;  
    

    }

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [manager setSecurityPolicy:[self customSecurityPolicy]];

    原文http://blog.csdn.net/miao_em/article/details/54288268

    相关文章

      网友评论

          本文标题:iOS 用AFN与后台双向https证书验证

          本文链接:https://www.haomeiwen.com/subject/addsbxtx.html