35

我正在尝试使用我的应用程序与服务器建立 HTTPS 连接。但是由于以下错误,连接失败

错误域=NSURLErrorDomain 代码=-1200 “发生 SSL 错误,无法与服务器建立安全连接。” UserInfo=0x612eb30 {NSErrorFailingURLStringKey=https:myURL.com/signup, NSLocalizedRecoverySuggestion=您仍然要连接到服务器吗?, NSErrorFailingURLKey=https:myURL.com/signup, NSLocalizedDescription=发生 SSL 错误并且安全连接到无法建立服务器。, NSUnderlyingError=0x612eb70 "发生 SSL 错误,无法建立与服务器的安全连接。"}

连接服务器的代码是

-(IBAction) handleEvents:(id)sender
 {
    if ((UIButton*)sender == submit) {

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;


    NSLog(@"Begin");
    NSData *urlData;
    NSURLResponse *response;
    NSError *error;

    NSString *url =[[NSString alloc]initWithFormat:@"%@signup",baseURL];
    NSURL *theURL =[NSURL URLWithString:url];
    NSMutableURLRequest *theRequest =[NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:0.0f];
    [theRequest setHTTPMethod:@"POST"];
    NSString *theBodyString = [NSString stringWithFormat:@"emailId=%@&mobileNumber=%@&appId=%@&password=%@&firstName=%@&lastName=%@"
                               ,@"abc@example.com",@"919879876780",@"bf1c7a6b3d266a7fe350fcfc4dda275211c13c23" ,@"qwerty" , @"Dev" , @"Sri"];
    NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];

    [theRequest setHTTPBody:theBodyData];
    urlData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
    }
}

我的委托方法是

- (void)handleError:(NSError *)error
{
NSLog(@"----->%@",error);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;   

 }

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
   }

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge (NSURLAuthenticationChallenge *)challenge {  
    NSLog(@"check auth");
    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
   }

我被困在这里,找不到任何出路。

任何形式的帮助将不胜感激。

提前致谢!!

4

8 回答 8

44

iOS 9 强制使用 HTTPS 的连接为 TLS 1.2 以避免最近的漏洞。在 iOS 8 中,甚至支持未加密的 HTTP 连接,因此旧版本的 TLS 也不会造成任何问题。作为一种解决方法,您可以将此代码段添加到您的 Info.plist:

  <key>NSAppTransportSecurity</key>  
  <dict>  
  <key>NSAllowsArbitraryLoads</key>  
  <true/>  
  </dict>  

因此,您将禁用 App Transport Security。希望这会有所帮助。

于 2015-06-30T12:17:35.283 回答
15

由于长期以来没有得到答复,而且我的研究和当前开发表明该代码非常适合连接,因此它是服务器上未经授权 CA 签名的证书。所以任何有这种问题的人检查证书在服务器端是否有效。

希望这会有所帮助!

于 2011-05-29T08:27:40.740 回答
8

也许您的设备有错误的日期和时间 :)

于 2016-01-20T12:12:38.637 回答
4

看看这个页面: https ://github.com/vinhnx/iOS-issues/issues/1

简而言之:原因是,从 iOS9 和 OSX 10.11 开始,所有基于 XCode7 构建的应用程序都需要 TLS 1.2 进行 SSL 连接,而对于早期协议则失败。
有几种方法可以克服这个问题。
“NSAppTransportSecurity -> NSAllowsArbitraryLoads”方法不好,因为它会为来自您的应用程序的所有连接禁用 TLS 1.2,这可能导致 Apple 拒绝您的应用程序。
“Per-Domain Exceptions”方法要好得多。

于 2015-09-10T10:33:11.573 回答
0

请确保TLS的版本是1.2,而不是TLS 1.0.

构建的应用程序XCode8需要TLS 1.2SSL 连接

于 2016-11-23T06:10:47.420 回答
0

当我遇到这个问题时,我使用的是 iOS 9.3.1 并且正在使用 https。它通过模拟器运行良好,但在我的 iPad 上失败了。原因是我的 iPad 启用了 WiFi 并已连接到我公司的访客网络,但我没有收到我接受加入网络的弹出网站。接受一切后再次正常工作。

于 2016-04-20T15:57:31.220 回答
-2

即使我也面临同样的问题。

如果服务器上的 SSL 证书是私有证书,则可能会出现此问题。在这种情况下,您可以使用this解决它。

于 2016-05-04T06:08:30.170 回答
-4

从手机尝试使用 safari 的网址。

于 2012-04-12T09:17:08.157 回答