iOS https证书验证

作者: 阿两sama | 来源:发表于2017-01-07 14:24 被阅读170次

    因为苹果审核原因项目需要添加证书验证,下面写下实现过程

    1.拿到服务器颁布的证书,cer证书。我们服务器用的是腾讯的免费ssl证书。

    2.吧证书拖入项目,注意要看下Build Phases>copy Bundle Resources 中是否已经导入了,没有的话要手动导入一下。

    3.为网络框架添加证书验证,因为我用的是AFNetworking本身就支持https证书验证

    AFHTTPSessionManager *session = [AFHTTPSessionManager manager];

    //设置返回类型

    session.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

    session.requestSerializer.timeoutInterval = 60;//请求超时时间

    [session setSecurityPolicy:[self customSecurityPolicy]];//证书验证

    NSString *url = [NSString stringWithFormat:@"%@%@", API_HOST, cmd.addr];

    NSDictionary*dic=[cmd toDicData];//提交参数

    NSURLSessionDataTask *request;

    request=[session POST:url parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

    //请求成功网络返回自行处理

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    if (failed) {

    NSString* errors = error.localizedFailureReason;

    if(IS_EMPTY(errors)) {

    errors = @"网络异常";

    }

    failed(nil, errors);

    }

    }];

    customSecurityPolicy证书方法

    - (AFSecurityPolicy*)customSecurityPolicy

    {

    // /先导入证书

    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"你的证书名字" ofType:@"cer"];//证书的路径

    NSData *certData = [NSData dataWithContentsOfFile:cerPath];

    // AFSSLPinningModeCertificate 使用证书验证模式

    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

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

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

    securityPolicy.allowInvalidCertificates = YES;

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

    //如置为NO,建议自己添加对应域名的校验逻辑。

    securityPolicy.validatesDomainName = NO;

    NSSet *certificateSet  = [[NSSet alloc] initWithObjects:certData, nil];

    [securityPolicy setPinnedCertificates:certificateSet];

    return securityPolicy;

    }

    以上证书验证就完成了,客户端比较简单,服务器配置生成证书就比较复杂,有时间我就写一下服务器端流程。第一次用简书写文代码格式不知道怎么弄。。。。。

    相关文章

      网友评论

      • SmallWhiteMouse:你可以试试markDown语法 写文章
      • 羽之_HB:免费证书 你怎么解决分享出去的内容呢,是http 还是https,
        阿两sama:分享出去的内容用的是http的

      本文标题:iOS https证书验证

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