我正在尝试使用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映射此出来是“无效的证书链”)。任何想法如何克服这个问题?提前谢谢。
答案 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证书被客户端解释为根证书,这就是首先需要进行此更改。