我正在尝试显示存储在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 =}
有什么想法吗?!
谢谢!
答案 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)
您还可以检查设备日期(如果有人/他故意将其更改为未来),以防您有可靠的证书,但仍然会出现此错误。