使用 AFNetworking 1.x 进行 SSL 固定

Posted

技术标签:

【中文标题】使用 AFNetworking 1.x 进行 SSL 固定【英文标题】:SSL Pinning with AFNetworking 1.x 【发布时间】:2014-01-17 14:14:20 【问题描述】:

我是 AFNetworking 框架和 SSL Pinning 的新手。 我已经做了:

#define _AFNETWORKING_PIN_SSL_CERTIFICATES_ = 1

但觉得还不够,对吗? 我怎样才能做到这一点? 这是我目前的要求:

NSArray *info = @@"action" : @"test"; 
NSError * error = nil; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:info options:NSJSONWritingPrettyPrinted error:&error];
NSMutableURLRequest*request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:url]]; 
NSMutableData *body = [NSMutableData data]; 
[body appendData:jsonData]; 
[request setHTTPBody:body]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:request.URL];
[httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation
*operation, id responseObject) 
    NSError *error;

    NSString *responseString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@"response String %@",responseString); 
 failure:^(AFHTTPRequestOperation *operation, NSError *error)  
    NSLog(@"Error: %@",error.localizedDescription); ]; 
[operation start];

请求工作正常,但我不知道它是否真的固定 ssl。

【问题讨论】:

How to compare SSL certificates using AFNetworking 的可能重复项 您使用的是哪个版本的 AFNetworking?旧版本使用#define,新版本使用AFHTTPClient 或操作上的属性 AFNetworking 1,较旧的定义。我想我让它工作了,但我如何检查它是否正确固定? @DavidCaunt 是的...但是具体是什么版本? 1.?您可以通过连接到https://httpbin.org/get 或类似名称来检查它是否正常工作,连接应该失败并出现错误 -1012 我想我成功了,没有收到任何错误。谢谢@DavidCaunt 【参考方案1】:

您必须将SSLPinningMode 属性设置为AFSSLPinningModeCertificate,然后才能在AFJSONRequestOperation 上调用start。

【讨论】:

以上是关于使用 AFNetworking 1.x 进行 SSL 固定的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 1.x 将 JSON 发布到 PHP

如何使用 AFNetworking 进行 json 解析

AFNetworking 2 使用 AFHTTPRequestOperation 进行身份验证

使用 AFNetworking 进行 SSL 证书验证

使用 AFNetworking 进行图像缓存

如何使用数组作为标头和 AFNetworking 进行 POST