iOS 用AFN与后台双向https证书验证

iOS常规的https单向验证不需要客户端做处理,但是客户端与服务端双向验证则需要客户端注入证书再请求。
1.先将pem证书安装至钥匙串,然后到处cer格式的证书
2.将cer证书拖入项目中
3.在AFN请求时注入证书
**

  • (AFSecurityPolicy*)customSecurityPolicy {
// /先导入证书  
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxxxx 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;  
  
securityPolicy.pinnedCertificates = [NSSet setWithObject:certData];  
  
return securityPolicy;  

}

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager setSecurityPolicy:[self customSecurityPolicy]];

原文http://blog.csdn.net/miao_em/article/details/54288268

你可能感兴趣的:(iOS 用AFN与后台双向https证书验证)