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;
}