• AFNetworking 请求HTTPS时 SSL的身份验证设置


    AFN如何验证SSL呢?

    第一web端服务器必须要提供一个叫SSL的证书,证书里面包含有一个叫.crt的文件,你需要将它转换成.cer的格式,转换方法如下:

      openssl x509 -in your certificate.crt -out your certificate.cer -outform der

    转换成功后需要找到你转换成.cer的文件.添加到你的xcode工程当中去;

    我用的是AFN2.x 需要添加AFSecuriPolicy和setAFHTTPRequestOperationManager, 如下

    - (AFSecurityPolicy*)SecurityPolicy

    {

        NSString *cerPath = [[NSBundlemainBundlepathForResource:@"your certificate"ofType:@"cer"];

        NSData *certData = [NSDatadataWithContentsOfFile:cerPath];

        AFSecurityPolicy *securityPolicy = [[AFSecurityPolicyallocinit];

        [securityPolicy setAllowInvalidCertificates:YES];

        [securityPolicy setPinnedCertificates:@[certData]];

        [securityPolicy setSSLPinningMode:AFSSLPinningModePublicKey];

        return securityPolicy;

    }    

    管理器设置

       AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

        [manager setSecurityPolicy:[selfSecurityPolicy]]; 

       manager.responseSerializer = [AFHTTPResponseSerializerserializer];

        [manager GET:@"your Url" parameters:nilsuccess:^(AFHTTPRequestOperation *operation,id responseObject) {

            NSLog(@"成功了");

        } failure:^(AFHTTPRequestOperation *operation,NSError *error) {

            NSLog(@"Error: %@", error);

        }];

        

    }

     这样就可以了,你run一下 会打印出来的信息如下:

    这说明请求还是失败的,那具体改如何解决呢? 需要你将下面的代码添加上就OK了!

    securityPolicy.allowInvalidCertificates =NO;

        securityPolicy.validatesDomainName =YES;

        securityPolicy.validatesCertificateChain =NO;

     

    allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO;

     

    如果是需要验证自建证书,需要设置为YES

    validatesDomainName 是否需要验证域名,默认为YES

    假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。

    置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立

    validatesCertificateChain 是否验证整个证书链,默认为YES, 设置为YES,会将服务器返回的Trust Object上的证书链与本地导入的证书进行对比,达到验证的效果,(对于这具体不明白的可以百度)!

     

    好了 现在你run一下就没问题了, 一切就OK 了!

    如有说的不对的地方请指出(见谅)!



    一天一章
  • 相关阅读:
    spring mvc处理json
    Unable to read TLD "META-INF/c.tld"错误
    linux设置tomcat开机自动启动
    linux tomcat自启动设置
    向PE文件植入后门代码技术讨论
    对自助提卡系统EDLM的一次代码审计
    XE下显示托盘图标(TrayIcon)
    delphi 查看编译版本
    Context Menus
    API Monitor---------------Using API Monitor to crack copy protected software
  • 原文地址:https://www.cnblogs.com/hangman/p/6876805.html
Copyright © 2020-2023  润新知