• iOS 适配HTTPS


    一、后台给一个crt文件,需要转换成cer文件

    openssl x509 -in后台给的.crt-out想要的名字.cer-outform der

    二、托入到到项目中,并,并,这一步很重要,加入到build phress中

    三、设置一个方法

    - (AFSecurityPolicy*)customSecurityPolicy
    {
        // /先导入证书
        NSString *cerPath =
        [[NSBundle mainBundle] pathForResource:@"server"
                                        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;
        if (certData) {
            securityPolicy.pinnedCertificates = [NSSet setWithObject:certData];
        } else {
            CKKLog(@"----%@---", @"证书未找到或格式不匹配");
        }
        
        return securityPolicy;
    }

    四,访问网络时或者初始化时设置这个安全方案

    ……
    #pragma mark  token加入
        NSString *token = [CKKLoginManager sharedManager].currentLoginData.token;
        if ([token hasValue] && ![token isEmpty]) {
            NSString *str = [NSString stringWithFormat:@"Bearer %@", token];
            [_manager.requestSerializer setValue:str forHTTPHeaderField:@"Authorization"];
        }
        
    #pragma mark  响应变更
        // 默认的JOSN响应
        _manager.responseSerializer = [AFJSONResponseSerializer serializer];
        if ([api isEqualToString:@"auth/forgetPasswordCaptcha"]) {
            // 接收二进制流转换成图片
            _manager.responseSerializer = [AFHTTPResponseSerializer serializer];
        }
    #pragma mark - 证书配置
        
    [_manager setSecurityPolicy:[self customSecurityPolicy]];
    
    
    #pragma mark 分get post delete 发起请求
        // 准备开启task
        NSURLSessionDataTask *task = nil;
        if (method == RequestMethodGet) {
    
            task = [_manager GET:api parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
                respondSuccessBlock(task, responseObject);
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    
                respondErrorBlock(task, error);
            }];
        } else if (method == RequestMethodPost) {
    
    ……

    info.plist文件别忘记了,允许所有的http访问

  • 相关阅读:
    PHP-redis中文文档
    非关系型数据库Redis学习(3)
    非关系型数据库Redis学习(1)
    【Android】找不到类
    【leetcode】删除单向链表的节点
    【上海交大oj】数学题3(数位dp)
    【上海交大oj】括号匹配加强 (动态规划)
    【上海交大oj】纸来纸去(动态规划)
    【上海交大oj】1053 二哥的内存
    【上海交大oj】畅畅的牙签袋(改)(枚举+模拟)
  • 原文地址:https://www.cnblogs.com/songxing10000/p/6306047.html
Copyright © 2020-2023  润新知