zoukankan      html  css  js  c++  java
  • 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 了!

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



    一天一章
  • 相关阅读:
    flask框架+上传文件接口实战【软件测试培训】【多测师_王sir】
    读取Excel中的视频文件地址+requests库下载后存入本地文件夹【软件测试培训】【多测师_王sir】
    UI和接口自动化中的设计模式:单例模式【软件测试培训】【多测师_王sir】
    Python+BeautifulReport生成完美的接口自动化测试报告【多测师_王sir】
    Linux命令中查找以.log结尾文件中不包含某个特定字符串这行的内容【多测师_王sir】
    查询多条数据
    django登录装饰接口封装
    django使用redis作为session缓存
    tinymce配置
    django重写authcenticate方法兼容用户、邮箱、密码认证登录
  • 原文地址:https://www.cnblogs.com/hangman/p/6876805.html
Copyright © 2011-2022 走看看