【问题标题】:AFNetworking 2 with AFSSLPinningModeCertificate带有 AFSSLPinningModeCertificate 的 AFNetworking 2
【发布时间】:2014-04-14 07:19:39
【问题描述】:

我遇到了 SSL 固定问题。第一个问题:如果我通过 Safari 登录,将所需的证书添加到钥匙串,然后从钥匙串应用程序导出文件并将其放入我的 Xcode 项目中,是否可以?我已经有了 .cer 文件,所以关于 SO 的问题似乎与我的情况无关。

这是我的代码:

- (AFSecurityPolicy*) customSecurityPolicy{
  NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"cert_name" ofType:@"cer"];
  NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];
  [securityPolicy setAllowInvalidCertificates:NO];
  [securityPolicy setPinnedCertificates:@[certData]];
  [securityPolicy setSSLPinningMode:AFSSLPinningModeCertificate];
  return securityPolicy;
}

-(void)secureLogin{    
  NSString *server = @"https_url";
  NSDictionary *params = @{@"login": self.loginField.text, @"password" : self.passField.text};
  NSError *error = nil;
  NSString *JSON = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:params
                                                                                options:NSJSONWritingPrettyPrinted
                                                                                  error:&error]
                                         encoding:NSUTF8StringEncoding];
  //NSLog(@"JSON: %@", JSON);

  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  [manager setSecurityPolicy:[self customSecurityPolicy]];
  manager.requestSerializer = [AFHTTPRequestSerializer serializer];
  manager.responseSerializer = [AFJSONResponseSerializer serializer];
  [manager POST:server
     parameters:@{@"data" : JSON}
        success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"hell yea! %@", responseObject);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"error: %@", error);
        }];
}

如果我设置setAllowInvalidCertificates:YES] 那么它很酷,但不安全。我试图从中获得一些意义,但到目前为止还没有。我不断得到:

错误:错误域=NSURLErrorDomain 代码=-1012“操作无法完成。 (NSURLErrorDomain 错误 -1012。)“UserInfo=0x8a35800 {NSErrorFailingURLKey=https_url, NSErrorFailingURLStringKey=https_url}

【问题讨论】:

  • 你想明白了吗?我遇到了完全相同的问题。
  • 在我的回答下查看我的评论

标签: ios objective-c ssl https afnetworking-2


【解决方案1】:

因为您的域名未注册 您可能使用类似于https://42.62.101.10:80/andsoon 您需要在 Xcode 中下载站点证书 (.cer)。 然后

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.securityPolicy =  [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
[manager.securityPolicy setAllowInvalidCertificates:YES];

// 试试看

【讨论】:

  • 您的回答是以“试一试”结尾,还是打算在其后粘贴一些内容?
【解决方案2】:

如果您拥有由公共 CA 颁发的有效证书,您可能应该包括从颁发的证书到根证书(包括所有中间证书)的所有证书的集合,或者您应该设置以下内容:

[securityPolicy setValidatesCertificateChain:NO];

【讨论】:

    【解决方案3】:

    对我有用的(至少现在)是将我的 .cer 文件拖放到模拟器中并安装证书,这使得通过 ssl 连接成功。不确定这是否应该是正确的方法,我更喜欢 AFNetworking 这样做,但似乎可行

    【讨论】:

    • 据我了解,您将 .cer 文件拖放到模拟器中,并选择在模拟器中“信任”它们。但是当你向你的客户发布你的应用程序时,他们将没有安装证书的选择,除非你把你的 .cer 放在你的网站中并要求你的客户手动安装它们,这是没有意义的。
    • 是的,但正如我所说:这是暂时的,我希望在最后阶段使用普通证书等......虽然很长一段时间没有这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多