ios - Restkit 和 SSL 证书错误
Posted
技术标签:
【中文标题】ios - Restkit 和 SSL 证书错误【英文标题】:ios - Restkit and SSL certificate error 【发布时间】:2013-01-09 20:17:50 【问题描述】:我有一个使用自签名 SSL 证书并运行 Web 服务的 tomcat 服务器。我正在尝试使用 Restkit 连接到 Web 服务。但是,我收到与证书有效性相关的错误。这是我的代码:
NSURL *url=[NSURL URLWithString:baseURL];
RKClient *client = [RKClient clientWithBaseURL:url];
client.disableCertificateValidation=YES;
RKRequest *request = [client requestWithResourcePath:[NSString stringWithFormat:@"/addEvent?deviceID=%@&eventID=%@",deviceID,eventID]];
request.disableCertificateValidation=YES;
request.delegate=self;
RKResponse *response = [request sendSynchronously];
此请求失败并出现以下错误:
2013-01-09 15:11:53.931 Mobile_ACPL[5761:907] The certificate for this server is invalid. You might be connecting to a server that is pretending to be “notify.acpl.lib.in.us” which could put your confidential information at risk.
即使我已将 disableCertificateValidation 设置为 YES,我也会收到此错误。我怎样才能让它工作?
编辑:我尝试添加证书,如下所示:https://github.com/RestKit/RestKit/pull/131
我仍然得到相同的结果。
编辑 2: 看起来错误消息正在 RKRequest.m 中的这一行设置:
payload = [NSURLConnection sendSynchronousRequest:_URLRequest returningResponse:&URLResponse error:&error];
【问题讨论】:
【参考方案1】:NSURLConnection 不支持同步调用中的authentication challenges。您需要进行异步调用才能使其正常工作。
【讨论】:
【参考方案2】:在我的例子中,我在 RKClient 上设置了 disableCertificateValidation,但我使用的 RKObjectManager 使用了不同的 RKClient。在 RKObjectManager 初始化之后放置的以下行起到了作用:
[RKObjectManager sharedManager].client.disableCertificateValidation = YES;
【讨论】:
【参考方案3】:如果你正在使用 RestKit 使用
client.allowsInvalidSSLCertificate = YES;
行不通,改为这样做:
如果您手动将 rest kit 添加到项目中,请单击 RestKit.xcodeproj 转到项目 > 构建设置 > 预处理器宏
并添加_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1
到此结束。
【讨论】:
以上是关于ios - Restkit 和 SSL 证书错误的主要内容,如果未能解决你的问题,请参考以下文章