SSL Error in Connection to Server through iPhone

47,714

Solution 1

Since it has been left unanswered for long time and my research and current development indicates that the code is perfectly fine for the connection, its the certificate at the server that was not signed by an authorized CA. so anyone having such kind of problem check that the certificate is valid at server end or not.

Hope this would help!!

Solution 2

iOS 9 forces connections that are using HTTPS to be TLS 1.2 to avoid recent vulnerabilities. In iOS 8 even unencrypted HTTP connections were supported, so that older versions of TLS didn't make any problems either. As a workaround, you can add this code snippet to your Info.plist:

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

Thereby you're disabling the App Transport Security. Hope that's helpful.

Solution 3

Maybe your device has a wrong date & time :)

Solution 4

Take a look at this page: https://github.com/vinhnx/iOS-issues/issues/1

In a nutshell: The reason is, that starting from iOS9 and OSX 10.11 all apps built on XCode7 will require TLS 1.2 for SSL connection, and fails for earlier protocols.
There are several methods to overcome this issue.
"NSAppTransportSecurity -> NSAllowsArbitraryLoads" approach is not good, because it will disable TLS 1.2 for all connections from your app, and this can lead to rejection of your app by Apple.
"Per-Domain Exceptions" approach is much more better.

Share:
47,714
devsri
Author by

devsri

An enthusiastic learner of technology

Updated on November 23, 2020

Comments

  • devsri
    devsri over 3 years

    I am trying to establish a HTTPS connection to a server using my app. But the connection fails due to following error

    Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo=0x612eb30 {NSErrorFailingURLStringKey=https:myURL.com/signup, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSErrorFailingURLKey=https:myURL.com/signup, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSUnderlyingError=0x612eb70 "An SSL error has occurred and a secure connection to the server cannot be made."}

    The code to connect to server is

    -(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=%@"
                                   ,@"[email protected]",@"919879876780",@"bf1c7a6b3d266a7fe350fcfc4dda275211c13c23" ,@"qwerty" , @"Dev" , @"Sri"];
        NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];
    
        [theRequest setHTTPBody:theBodyData];
        urlData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
        }
    }
    

    my delegate methods are

    - (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];
       }
    

    I am stuck over here and could not find any way out.

    Any form of help would be greatly appreciated.

    thanks in advance!!

  • sirvine
    sirvine almost 9 years
    If you're nervous about turning off App Transport Security for all domains, you can do it for specific domains: studio76.pro/…
  • damithH
    damithH over 7 years
    For development purpose its ok, but when its go to app store submission this not acceptable.
  • jfgrang
    jfgrang over 7 years
    Great answer. I had the issue for Weibo integration and once I entered TLSv1.0 it worked. Thanks.
  • DawnSong
    DawnSong over 7 years
    Not CA's problem, just because SSL's version is too low.
  • Bhanu Birani
    Bhanu Birani almost 6 years
    fantastic. I checked all the possible solution and forgot to check the device date. Thanks for putting up this. Sometime we miss very basic things and try to debug in complicated way.
  • Glenn Howes
    Glenn Howes almost 6 years
    Could you elaborate on why a wrong date would cause this issue?
  • Popmedic
    Popmedic about 5 years
    If the date of your device is before or after the expiry, then it is expired.