使用Mac OS X keychain for Mac上安装的自签名证书发送sendSynchronousRequest

时间:2011-12-16 00:30:56

标签: objective-c nsurlconnection ssl-certificate keychain self-signed

我正在使用

Mac OS X (而非iphone)向网络服务器发送https请求
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response   error:&error];

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

我从服务器上获得了自签名证书,我在Mac的钥匙串上安装了该证书(并验证了来自浏览器的https请求正常)。

我不想通过异步发送数据和处理didReceiveAuthenticationChallenge

来忽略证书

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

1 个答案:

答案 0 :(得分:0)

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

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

在谈到第三方库时,AFNetworking也可以(以多种方式)执行此操作,并且还可以选择同步工作。

#ifdef DEBUG
#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_     
#endif

最后但并非最不重要的是,您可以在低级别并使用CFNetworking本身(您可以查看ASIHTTPRequest代码如何执行此操作)来执行此操作,但这可能会比使用NSURLConnectionDelegate添加更多的样板代码。

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