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

来源:互联网 发布:jquery能储存数据不 编辑:程序博客网 时间:2024/06/05 11:03

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

其余不需要其他设置,在实际请求中只用调用这一行代码即可。


0 0
原创粉丝点击