ios - 使用 AFNetworking 2.0 的 SSL Pinning 允许 POST 请求,而不管使用的证书文件如何

标签 ios cocoa-touch ssl ios7 afnetworking

我们使用 DigiCert 作为我们的 CA。我们使用以下命令制作了 .cer 文件:

openssl x509 -in WEBSITE.crt -outform der -out WEBSITE.cer 

应该可以工作,但问题是不仅那个 cer 可以工作,而且我们放入代码中的任何文件都可以工作。我们甚至测试了空白的 .cer 文件,效果也很好。我所说的工作是指无论使用什么 .cer 文件,我们都能够向服务器发出发布请求。显然,如果使用的不是我们签名的证书,我们希望它失败。

我们的起点设置在 Cloudflare,然后路由到安装了我们的证书的 Amazon 负载均衡器。

我自己使用 Charles Proxy 进行 MITM,无论有没有 iOS 应用程序中的证书,我都可以做到这一点。

我们正在使用最新版本的 AFNetworking 进行 SSL 固定。我继承了 AFHTTPRequestOperationManager 并添加了以下方法:

+ (AFSecurityPolicy*) siteSecurityPolicy
{
    /**** SSL Pinning ****/
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"WEBSITE" ofType:@"cer"];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];
    [securityPolicy setAllowInvalidCertificates:NO];
    [securityPolicy setPinnedCertificates:@[certData]];
    [securityPolicy setSSLPinningMode:AFSSLPinningModeCertificate];
   /**** SSL Pinning ****/

    return securityPolicy;
}

我发帖的代码如下:

websiteRequestOperationManager *manager = [websiteRequestOperationManager manager];

/**** SSL Pinning ****/
[manager setSecurityPolicy:[websiteRequestOperationManager siteSecurityPolicy]];
/**** SSL Pinning ****/

[manager GET:WEBSITE_URL parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary* responseObject) {
    //code
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    //code
}];

我们错过了什么关键步骤?

我还应该提到我的 NSLog:

[manager.securityPolicy.pinnedCertificates count]

并获得了 1。

最佳答案

我似乎也是这种情况,使用 AFNetworking 2.3.1。 AFNetworking 2.1.0 没有这个问题,但是固定在 iOS 8 beta 5 上会中断。

关于ios - 使用 AFNetworking 2.0 的 SSL Pinning 允许 POST 请求,而不管使用的证书文件如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963981/

相关文章:

ios - 核心数据 NSPersistentStoreCoordinator 的 +metadataForPersistentStoreOfType :URL:error: sometimes returns nil

objective-c - iTunes U : "Developing Apps for iOS" Senseful to watch if having newer version?

iphone - SQLite、iPhone 和版本控制

apache - 301 重定向到具有多站点/共享主机的非 www ssl 版本

linux - Broadcom 引擎的 OpenSSL 速度测试

ssl - 任意子子域

ios - 正在调用 willDisplayHeaderView 但 titleForHeaderInSection 中的文本属性保持不变

ios - 不一致的今天小部件行为打破了 subview 的高度限制

ios - 在另一个文本字段的文本更改时更改 UITextField 的文本

iphone - Objective-C 中不常用的符号