通过iPhone连接到服务器时出现SSL错误

通过iPhone连接到服务器时出现SSL错误,ssl,https,nsurlconnection,nsurlrequest,Ssl,Https,Nsurlconnection,Nsurlrequest,我正在尝试使用我的应用程序与服务器建立HTTPS连接。但由于以下错误,连接失败 Error Domain=NSURLErrorDomain Code=-1200“发生SSL错误,无法与服务器建立安全连接。”UserInfo=0x612eb30{NSErrorFailingURLStringKey=https:myURL.com/signup,nsLocalizedRecoverysSuggestion=是否仍要连接到服务器?,nserrorfailingurkey=https:myURL.com

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

Error Domain=NSURLErrorDomain Code=-1200“发生SSL错误,无法与服务器建立安全连接。”UserInfo=0x612eb30{NSErrorFailingURLStringKey=https:myURL.com/signup,nsLocalizedRecoverysSuggestion=是否仍要连接到服务器?,nserrorfailingurkey=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];
   }
我被困在这里,找不到任何出路

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


提前感谢!!

因为它已经很长时间没有得到回答了,而且我的研究和当前的开发表明,代码对于连接来说非常好,这是服务器上的证书,没有经过授权CA的签名。因此,任何有这种问题的人都要检查证书在服务器端是否有效。


希望这会有所帮助!!

通过手机上的safari尝试网址。

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

  <key>NSAppTransportSecurity</key>  
  <dict>  
  <key>NSAllowsArbitraryLoads</key>  
  <true/>  
  </dict>  
NSAppTransportSecurity
NSAllowsArbitraryLoads
因此,您正在禁用应用程序传输安全。希望这会有所帮助。

请查看此页面:

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

“每个域的例外情况"方法更好。

可能您的设备的日期和时间错误:)

当我遇到这个问题时,我使用的是iOS 9.3.1,使用的是https。通过模拟器它工作正常,但在我的iPad上失败。原因是我的iPad启用了WiFi并连接到了我公司的来宾网络,但我没有收到我们看到的弹出窗口B我接受加入网络的地点。接受后一切都恢复正常。

甚至我也面临同样的问题


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

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


基于
XCode8
构建的应用程序需要
tls1.2
进行SSL连接

如果您担心关闭所有域的应用程序传输安全,您可以为特定域执行此操作:出于开发目的,这是可以的,但当它进入应用程序商店提交时,这是不可接受的。回答很好。我有微博集成的问题一旦我输入了
TLSv1.0
,它就工作了。谢谢。这不是CA的问题,只是因为SSL的版本太低了。太棒了。我检查了所有可能的解决方案,但忘记检查设备日期。谢谢你提出这个。有时我们会错过非常基本的东西,并尝试以复杂的方式进行调试。你能详细说明为什么错误的日期会导致错误吗此问题?如果您的设备的日期在到期之前或之后,则该设备已过期。