我正在开发使用带有 SSL 的 REST Web 服务的应用程序。Web 服务已经到位,并使用 SSL 证书标识自己。即使证书似乎是有效的,它仍然被 iOS 拒绝。以下是详细信息:
- Web 服务提供由 3 个证书组成的证书链,此列表中的根证书,中间证书,最后是 Web 服务证书
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)space
每次我向 Web 服务发送请求时都会调用该方法。RestKit 代码中的注释说“服务器正在使用操作系统无法验证的 SSL 证书”,所以我想我永远不应该使用那种方法,对吧?- 我尝试在测试设备上从 Safari 访问 Web 服务,并且证书被自动接受。桌面浏览器也是如此。
- Sslshopper说证书很好。
我可以通过将证书添加到应用程序包并以与自签名证书相同的方式处理它来连接到 Web 服务,但我想以正确的方式解决这个问题。非常感谢任何帮助,特别是如果有人能指出为什么 iOS 上的 Safari 接受证书,而我的应用程序不接受。
编辑: 原来我一直在使用旧的 RestKit 版本。我创建了概念证明,允许我向我的服务器发送一些请求,并且从今天(2012 年 5 月 3 日)开始使用 RestKit 主机,证书被接受。但是,我接到两个电话connection:canAuthenticateAgainstProtectionSpace:
,在这两个电话中我都返回 NO,但无论如何它都能正确连接。所以,新的问题是,我现在可以正确连接的 RestKit 到底发生了什么变化。我需要知道这一点,因为我必须修补要用于发布的旧版本。之后我会更新 RestKit。
编辑:我需要把它还给 RestKit 人,这不是他们的错。我尝试连接的 Web 服务正在使用某种网关,这是问题的根源。当天早些时候,网关工作人员进行了一些修复,这就是为什么当我设法使用最新的 RestKit 版本执行测试时它可以正常工作的原因。