2011-10-23 137 views
2

我想用https发送一个非常简单的ASIHTTPRequest。虽然我已经设置了validatesSecureCertificate标志为“NO”,我还是得到了我的请求,一个奇怪的反应:ASIHTTPRequest https请求&SSL

A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date) 

我使用的是非常简单的,我删除出于安全原因,实际参数代码:

NSURL *url = [NSURL URLWithString:@"https://secured.cet.ac.il/KotarServices/getMyBooks.aspx?username=xxxxxxxx&password=xxxxx&packageid=x"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDidFailSelector:@selector(getMyBooksFailedWithError:)]; 
    [request setDidFinishSelector:@selector(getMyBooksFinishedWithResult:)]; 
    [request setDelegate:self]; 
    [request setValidatesSecureCertificate:NO]; 
    [request startAsynchronous]; 

深入研究代码,我发现请求在“-9807”错误代码上失败,该代码仅与操作系统相关,与我正在与之交互的服务器无关(SecureTransport.h将其映射为“无效证书链”)。任何想法如何克服这个问题?提前致谢。

回答

8

我记得我有一个GoDaddy证书的类似问题,并且必须在if(![self validatesSecureCertificate])内的注释“处理SSL证书设置”下面的ASIHTTPRequest.m中进行以下更改, 1160:

[sslProperties setObject:(NSString *)kCFBooleanTrue forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];

+0

谢谢,我明天会尝试这个第一件事,并让你知道它是否有帮助 – Stavash

+0

不幸的是,这并不能解决问题。仍然得到相同的错误代码。无论如何努力 – Stavash

+0

更新:我解决了这个问题,通过设置[sslProperties setObject:(NSString *)kCFBooleanTrue forKey:(NSString *)kCFStreamSSLAllowsExpiredRoots],你确实指出了我在正确的方向 - 谢谢! – Stavash

1

我用今天刚买的GoDaddy证书遇到了这个问题。对trydis的解决方案的一个更正:我想你想在if(![self validatesSecureCertificate])之外,因为你实际上想要验证证书。正如评论所说,if子句中的内容“告诉CFNetwork不要验证SSL证书”。 TBH,我不知道为什么GoDaddy证书被客户端解释为根证书,这是首先需要进行这种更改的必要条件。