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を使用している接続をTLS1.2に強制します。iOS 8では、暗号化されていないHTTP接続もサポートされていたため、古いバージョンのTLSでも問題は発生しませんでした。回避策として、次のコードスニペットをInfo.plistに追加できます。

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

これにより、AppTransportSecurityが無効になります。お役に立てば幸いです。

于 2015-06-30T12:17:35.283 に答える
15

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!!

于 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で構築されたすべてのアプリはSSL接続にTLS 1.2を必要とし、以前のプロトコルでは失敗するためです。
この問題を解決するには、いくつかの方法があります。
「NSAppTransportSecurity->NSAllowsArbitraryLoads」アプローチは、アプリからのすべての接続に対してTLS 1.2を無効にし、Appleによるアプリの拒否につながる可能性があるため適切ではありません。
「ドメインごとの例外」アプローチの方がはるかに優れています。

于 2015-09-10T10:33:11.573 に答える
0

私はiOS9.3.1を使用していて、この問題が発生したときにhttpsを使用していました。シミュレーターでは問題なく動作しましたが、iPadでは失敗しました。その理由は、iPadでWiFiが有効になっていて、会社のゲストネットワークに接続していたのに、ネットワークへの参加を受け入れるポップアップWebサイトを受け取っていなかったためです。すべてを受け入れた後、再びうまくいきました。

于 2016-04-20T15:57:31.220 に答える
0

TLSのバージョンが1.2ではなく1.2であることを確認してくださいTLS 1.0

構築されたアプリはSSL接続XCode8が必要になりますTLS 1.2

于 2016-11-23T06:10:47.420 に答える
-2

私も同じ問題に直面していました。

この問題は、サーバー上のSSL証明書がプライベート証明書である場合に発生する可能性があります。このようなシナリオでは、これを使用して解決できます。

于 2016-05-04T06:08:30.170 に答える
-4

電話からサファリでウェブアドレスを試してみてください。

于 2012-04-12T09:17:08.157 に答える