因为苹果审核原因项目需要添加证书验证,下面写下实现过程
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;
}
以上证书验证就完成了,客户端比较简单,服务器配置生成证书就比较复杂,有时间我就写一下服务器端流程。第一次用简书写文代码格式不知道怎么弄。。。。。
网友评论