【问题标题】:Ignoring SSL certificate errors with NSURLConnection使用 NSURLConnection 忽略 SSL 证书错误
【发布时间】:2013-03-13 17:15:25
【问题描述】:

我使用[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)]从web服务拉取数据,但是web服务器有自发证书,导致出现这个错误:

错误显示使用:

NSAlert *a = [NSAlert alertWithError:error];
[a runModal];

有没有办法忽略这个错误并继续?

【问题讨论】:

  • 我认为这个问题之前已经被问过,并且已经找到并重新命名了之前的问题。希望它能解决您的问题。
  • 你说得对,这是一个骗子(虽然我没有得到那个答案,因为我搜索了sendAsynchronousRequest,所以这个问题专门针对那个方法)。
  • “使用 NSURLConnection 忽略 SSL 证书错误” - 最好解决问题而不是忽略错误(假设它是一个不平凡的错误,例如伪造证书而不是过期的证书)。如果您不打算正确使用 PKI 和 SSL,那为什么还要使用它呢?

标签: cocoa nsurlconnection sendasynchronousrequest


【解决方案1】:

按照链接问题中的说明,我为 NSURLConnection 定义了一个虚拟接口:

@interface NSURLRequest (DummyInterface)
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
@end

并在创建请求之前调用该方法:

[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

这抑制了证书无效的错误。

【讨论】:

  • 这不是私有API吗?
  • 是的,但是我的应用不在应用商店中,而是直接分发的,所以不用担心被拒绝。当然,我冒着在更高版本的 OS X 中更改 API 的风险,因为这是未记录的。
  • 酷,只是想确认一下
  • “我冒着改变 API 的风险......” - 任何攻击者的信息泄露和丢失风险如何?你会告诉你的客户吗?
【解决方案2】:

这可能会被 Apple 拒绝。使用正确的 NSConnectiondatadelegate 实现:

想办法解决它: Stackoverflow response to similar question

【讨论】:

  • 我不能使用NSURLConnectionDelegate 方法,因为我正在调用-sendAsynchronousRequest。尽管如此,这对于我的应用程序来说现在是一个有争议的问题,因为我通过为服务器购买 SSL 证书解决了这个问题。
猜你喜欢
  • 2023-03-31
  • 2023-03-23
  • 2012-08-17
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多