web-dev-qa-db-ja.com

iPhoneを介したサーバーへの接続でのSSLエラー

アプリを使用してサーバーへのHTTPS接続を確立しようとしています。しかし、次のエラーにより接続は失敗します

Error Domain = NSURLErrorDomain Code = -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=%@"
                               ,@"[email protected]",@"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];
   }

私はここで立ち往生しており、道を見つけることができませんでした。

どんな形の助けも大歓迎です。

前もって感謝します!!

32
devsri

それは長い間未回答のままであり、私の研究と現在の開発は、コードが接続、認証されたCAによって署名されていないサーバーでの証明書に完全に適していることを示しています。そのため、この種の問題がある場合は、証明書がサーバー側で有効かどうかを確認してください。

これが役立つことを願っています!!

15
devsri

iOS 9は、HTTPSを使用している接続を最近の脆弱性を回避するためにTLS 1.2に強制します。 iOS 8では、暗号化されていないHTTP接続もサポートされていたため、TLSの古いバージョンでも問題は発生しませんでした。回避策として、次のコードスニペットをInfo.plistに追加できます。

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

これにより、App Transport Securityを無効にします。お役に立てば幸いです。

43
Voda Ion

デバイスの日付と時刻が間違っている可能性があります:)

5
kolesnikovakate

このページをご覧ください: https://github.com/vinhnx/iOS-issues/issues/1

簡単に言うと、理由は、iOS9およびOSX 10.11以降、XCode7で構築されたすべてのアプリはSSL接続にTLS 1.2を必要とし、以前のプロトコルでは失敗するためです。
この問題を解決するにはいくつかの方法があります。
「NSAppTransportSecurity-> NSAllowsArbitraryLoads」アプローチは、アプリからのすべての接続でTLS 1.2を無効にするため、Appleによるアプリの拒否につながる可能性があるため、適切ではありません。
「ドメインごとの例外」アプローチの方がはるかに優れています。

4

[〜#〜] tls [〜#〜]のバージョンが1.2TLS 1.0ではないことを確認してください。

XCode8で構築されたアプリは、SSL接続にTLS 1.2を必要とします

0
rui

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

0
Ecyrb