iOS使用HTTPS之AFNetworking

公司是做P2P的,目前需要做安全审核备案,所以需要服务器和前段使用HTTPS。

以前针对iOS9.0对ATS做过适配,允许http和https同时使用。


所以为了备案,必须使用https,需设置成YES。



项目使用的是单向认证

1.获取证书.cer

 后台服务器运维工程师提供;或者自己使用chrome浏览器获取,步骤如下:

 首先在浏览器中输入https://www.xxxx.cn你项目的网址,在网页中点击右键,弹出框点击查看:

iOS使用HTTPS之AFNetworking_第1张图片

 之后效果如下:

iOS使用HTTPS之AFNetworking_第2张图片

然后在选择界面中的“View ce rcertificate”

iOS使用HTTPS之AFNetworking_第3张图片

2.将下载保存下来的证书.cer导入到工程中,然后设置AFNetworking代码:

- (AFSecurityPolicy *)customSecurityPolicy{
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ierfa" ofType:@"cer"];
    NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
    
    if (cerData == nil) {
        return nil;
    }
    NSSet *setData = [NSSet setWithObject:cerData];
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    securityPolicy.allowInvalidCertificates = YES;
    securityPolicy.validatesDomainName = NO;
    [securityPolicy setPinnedCertificates:setData];
    return securityPolicy;
}
AFHTTPSessionManager *manager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:API_HEADER]];
    // 设置超时时间
    [manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
    manager.requestSerializer.timeoutInterval = kTimeoutInterval;
    [manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
    //HTTPS证书认证
    [manager setSecurityPolicy:[self customSecurityPolicy]];
    [manager POST:urlstring parameters:paramDict progress:^(NSProgress * _Nonnull uploadProgress) {
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
        success(responseObject, hud);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
        failure(error, hud);
    }];



你可能感兴趣的:(iOS开发)