iOS 服务器证书不受信任解决办法

在实际开发中,后台服务器开发人员为了方便自建证书,有时候这些证书不受苹果官方信任,此时App显示的是一片空白,用SDWebImage加载不了图片,从服务器获取不了数据,AFN请求也是被忽略了。细心的你会发现控制台打印一串提示信息,大概的内容是提醒CA证书不被信任,请更换合适的证书。

解决办法是叫后台更换证书,如果你不想更换证书的话,也可以通过代码来调整,信任服务器的证书。

       

//采用NSURLConnection进行网络请求,会调用此方法
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    
    //证书处理
    //后台自建证书,因为证书无效导致AFN请求被取消,此段代码用在外网测试环境
    if([kBaseURL rangeOfString:@"testapp.gtax.cn"].location != NSNotFound){
        
    }
    // 判断是否是信任服务器证书
    if(challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) {
        // 告诉服务器,客户端信任证书
        // 创建凭据对象
        NSURLCredential *credntial = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
        // 告诉服务器信任证书
        [challenge.sender useCredential:credntial forAuthenticationChallenge:challenge];
    }

}

那么,在AFN中如何绕过证书验证呢?对,设置AFSecurityPolicy参数:

//证书处理
        //后台自建证书,因为证书无效导致AFN请求被取消,此段代码用在外网测试环境
        if([kBaseURL rangeOfString:@"testapp.gtax.cn"].location != NSNotFound){
            AFSecurityPolicy * securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
            securityPolicy.allowInvalidCertificates = YES;
            securityPolicy.validatesDomainName = NO;
            self.requestManager.securityPolicy = securityPolicy;
        }




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