4

我正在使用从Mac OS X(不是 iphone)同步向 Web 服务器发送 https 请求

NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response   error:&error];

但是我收到错误代码=-1202 - “不受信任的服务器证书”

我有一个来自服务器的自签名证书,我安装在我的 Mac 的钥匙串上(并验证了来自浏览器的 https 请求是否正常)。

我不想通过异步发送数据和处理来忽略证书didReceiveAuthenticationChallenge

如果sendSynchronousRequest证书安装在钥匙串中,则不应工作。我错过了什么吗?

4

1 回答 1

0

据我所知,你不能用同步请求来做到这一点。至少不使用 NSURLConnection。您可以使用ASIHTTPRequest,它看起来像这样:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setValidatesSecureCertificate:NO]
[request startSynchronous];

当谈到 3rd 方库时,AFNetworking也可以做到这一点(以多种方式),它还可以选择同步工作。

#ifdef DEBUG
#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_     
#endif

最后但并非最不重要的一点是,您可以通过降低级别并使用 CFNetworking 本身来做到这一点(您可以查看 ASIHTTPRequest 代码如何做到这一点),但这可能会比使用 NSURLConnectionDelegate 添加更多样板代码。

我还提到了 3rd 方库,因为它们使用不同的方法来异步 HTTP 请求。我鼓励你看看它们,因为它们可能更符合你不想使用 NSURLConnectionDelegate 的原因。

于 2013-09-15T11:12:03.373 回答