4

几天前我发现了ASIHTTPRequest,现在我被阻止了。我想在 https 地址上验证自己的身份(https://user:pwd@api.domain.com/0.1/userCom/?apikey=12432

我试试这段代码:

   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 {}";

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

4

2 回答 2

7

有两种可能的方法:

i) 如果可能,修复您/服务器上的证书。(或者您可能会使用错误的主机名进行连接?在设备上使用 safari 时是否会出现相同的错误?)

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

或者:

ii) 禁用证书检查:

[request setValidatesSecureCertificate:NO];

显然,禁用证书检查并不是一个好的永久解决方案。禁用它会删除 https 提供的许多安全性,并使您的应用程序一开始就容易受到中间人 (MITM) 攻击。在调试或使用没有适当证书的测试服务器时,这可能是一个很好的临时解决方案,但从长远来看,您应该修复基础问题,以便服务器的证书有效。

于 2010-08-07T11:38:03.260 回答
0

也发生在我身上,但原因是另一回​​事 - 因为我的测试设备的日期和时间设置设置为过去的日期。

证书仅在特定日期范围内有效,这就是为什么应用程序使用错误的日期设置无法验证它的原因。我通过在 iphone 上设置正确的日期和时间来修复它。

于 2012-12-28T10:58:28.217 回答