一、后台给一个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访问