ASIHTTPRequest https请求& SSL

时间:2011-10-23 17:50:48

标签: iphone objective-c ios ipad asihttprequest

我正在尝试使用https发送一个非常简单的ASIHTTPRequest。虽然我已将validatesSecureCertificate标志设置为“NO”,但我的请求仍然得到奇怪的响应:

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映射此出来是“无效的证书链”)。任何想法如何克服这个问题?提前谢谢。

2 个答案:

答案 0 :(得分:8)

我记得我在使用GoDaddy证书时遇到了类似的问题,并且必须在ASIHTTPRequest.m中进行以下更改,位于if(![self validatesSecureCertificate])内的评论“处理SSL证书设置”下方,在1160行左右:

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

答案 1 :(得分:1)

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