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 证书错误的主要内容,如果未能解决你的问题,请参考以下文章

SSL,SSL证书,SSL协议,三个其实都是一个吗?还是说有区别呢

手把手教你申请腾讯云免费SSL证书

无法将SSL证书与Amazon Cloudfront相关联

企业型网站可以用DV SSL证书吗

SSL安全证书过期的原因及解决方法

iOS 应用 SSL .p12 身份验证 - 证书错误错误 (-9825)