
Objective-C/Cocoa: How do I accept a bad server certificate?我试图使用NSURLRequest访问具有过期证书的网站。 发送请求时,将使用以下信息调用我的connection:didFailWithError委托方法:
我的搜索仅提供了一种解决方案:NSURLRequest中的隐藏类方法:
但是,出于明显的原因,我不想在生产应用程序中使用私有API。 有什么建议吗? 我是否需要使用CFNetwork API,如果是,请使用两个问题:
编辑: iPhone OS 3.0为此引入了一种受支持的方法。 此处有更多详细信息:如何使用NSURLConnection与SSL连接以获得不受信任的证书? 支持的方法是使用CFNetwork。您要做的是将kCFStreamPropertySSLSettings附加到指定kCFStreamSSLValidatesCertificateChain == kCFBooleanFalse的流。下面是执行此操作的一些快速代码,减去对有效结果的检查会增加清理效果。完成此操作后,您可以使用CFReadStreamRead()获取数据。
如果它用于内部服务器以进行测试,为什么不将测试服务器的证书导入KeyChain并设置自定义信任设置? iPhone OS 3.0引入了一种受支持的方法,不需要较低级别的CFNetwork API。此处有更多详细信息: 如何使用NSURLConnection与SSL连接以获得不受信任的证书? 是否可以创建自签名证书并将自定义证书颁发机构添加到受信任的CA?我不太确定这在iPhone上如何工作,但是我认为在Mac OS X上您可以将它们添加到钥匙串中。 您可能对此帖子也有兴趣Re:如何处理NSURLDownload中的错误证书错误 我遇到了同样的问题-我正在开发SOAP客户端,并且开发服务器具有"本地"证书。因为我没有使用NSURL,所以我什至无法使用该方法解决问题,但是(文献记载不清,显然被遗弃的)WS方法决定暂时(内部)使用非SSL连接。 话虽这么说,但是浮现在脑海的问题是,如果您不愿意在生产应用程序中使用私有API,您是否应该允许访问带有躲避证书的网站? 我将引用Jens Alfke的话:
另一种选择是使用备用连接库。 我是AsyncSocket的忠实拥护者,它支持自签名证书 http://code.google.com/p/cocoaasyncsocket/ 看一下,我认为它比标准的NSURLRequests更健壮。 |