iOS https证书验证

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

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;

}

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

你可能感兴趣的:(iOS https证书验证)