2010-08-07 56 views
4

前几天我发现了ASIHTTPRequest,现在我被阻塞了。 我想通过https地址验证我的自我(https://user:[email protected]/0.1/userCom/?apikey=12432ASIHTTPRequest身份验证

我试试这个代码:

NSURL *url = [NSURL URLWithString:@"https://api.domain.com/0.1/userCom/?apikey=12432"]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setDelegate:self]; 
[request setUsername:@"myUserName"]; 
[request setPassword:@"myPassword"]; 
[request startAsynchronous]; 

而且我已经实现了委托方法

-(void)requestFailed:(ASIHTTPRequest *)request 
{ 
NSError *error = [request error]; 
NSLog(@"Failed %@ with code %d and with userInfo %@",[error domain],[error code],[error userInfo]); 
} 

-(void)requestFinished:(ASIHTTPRequest *)request 
{ 
NSLog(@"Finished : %@",[request responseString]); 
} 

当我启动我的应用程序直接调用requestFailed方法,并且我收到以下消息:

Failed ASIHTTPRequestErrorDomain with code 1 and with userInfo { 
NSLocalizedDescription = "A connection failure occurred: SSL problem (possibly a bad/expired/self-signed certificate)"; 
NSUnderlyingError = "Error Domain=NSOSStatusErrorDomain Code=-9807 \"The operation couldn\U2019t be completed. (OSStatus error -9807.)\" UserInfo=0x680fbf0 {}";

有想法解决这个问题吗? 非常感谢!

回答

7

有两种可能的方法:

一)固定如果可能的话你/在服务器上的证书。 (或者您有可能使用错误的主机名进行连接的机会很小?在设备上使用Safari时是否出现相同的错误?)

这绝对是正确和首选的方法。

或:

II) 禁用证书检查:

[request setValidatesSecureCertificate:NO]; 

禁用证书检查是,也许很明显,不是一个好的长久之计。禁用它会消除https提供的大量安全性,并让您的应用面向中间人(MITM)攻击开放。在调试或使用没有合适证书的测试服务器时,它可能是一个很好的临时解决方案,但从长远来看,您应该修复基础问题,以便服务器的证书有效。

+0

i)这不是我的服务器,所以我会检查这与我的客户端:) 如果我尝试https:// user:[email protected]/0.1/userCom/?apikey = 12432对我Safari Mac没有问题。 ii)运作良好! 感谢您的帮助。如果你有任何其他的东西要添加,请写下:) – Pierre 2010-08-07 11:50:00

+0

这可能是你的Mac有一些证书颁发机构提出的iphone没有,并且缺少证书颁发机构可能导致这种错误。如果你在设备上的safari上出现类似的错误,那么这就是问题 - 如果设备上的safari工作正常,那么它可能是某种asihttprequest错误。 – JosephH 2010-08-07 12:49:37

+0

在大多数情况下禁用证书检查帮助 – knuku 2010-11-23 15:01:25

0

也适用于我,但原因是另一回​​事 - 因为我的测试设备的日期&时间设置设置为过去的日期。

证书只在特定的日期范围内有效,这就是为什么应用程序未能使用错误的日期设置对其进行验证的原因。我通过在iPhone上设置正确的日期&来修复它。