获取“此服务器的证书无效”。在iPad上从Amazon S3(HTTPS)加载图像时,但在模拟器上没有错误

时间:2013-08-16 19:00:22

标签: amazon-s3 nsurlconnection amazon afnetworking

我正在尝试显示存储在Amazon S3 Bucket上的图像。该网址类似于https://s3.amazon.com/..../test.jpg。每当我在iPhone模拟器上执行此操作时,图像都会正确显示。但是,如果我在实际设备上测试它,我会继续:

  

错误域= NSURLErrorDomain代码= -1202"此证书   服务器无效。您可能正在连接到的服务器   假装是“s3.amazonaws.com”,可以保密   有风险的信息。"的UserInfo = 0x20007030   {NSErrorFailingURLStringKey = https://s3.amazonaws.com/.../test.jpeg,   NSLocalizedRecoverySuggestion =您想要连接到服务器吗?   无论如何?,   NSErrorFailingURLKey = https://s3.amazonaws.com/.../test.jpeg,   NSLocalizedDescription =此服务器的证书无效。您   可能正在连接到假装的服务器   “s3.amazonaws.com”,可以把你的机密信息放在   risk。,NSUnderlyingError = 0x20014d40"此服务器的证书   是无效的。您可能正在连接到假装的服务器   是“s3.amazonaws.com”,可以把你的机密信息   风险。",NSURLErrorFailingURLPeerTrustErrorKey =}

有什么想法吗?!

谢谢!

2 个答案:

答案 0 :(得分:12)

我从S3获得了相同的证书错误,发现将此添加到NSURLConnectionDelegate修复了问题:

-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
   if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] &&
       [challenge.protectionSpace.host hasSuffix:@"example.com"])
   {
       // accept the certificate anyway
       [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
   }
   else
   {
       [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
   }
}

注意:您需要将'example.com'更改为您信任的域,或使用比'hasSuffix'更复杂的机制。

仅供参考Apple Technote TN2232“HTTPS服务器信任评估”详细介绍了证书被拒绝的原因以及如何处理证书: https://developer.apple.com/library/ios/technotes/tn2232/_index.html

感谢Gordon Henriksen在https://stackoverflow.com/a/2033823/235229回答这个问题,但是使用了旧的api。

答案 1 :(得分:0)

您还可以检查设备日期(如果有人/他故意将其更改为未来),以防您有可靠的证书,但仍然会出现此错误。