1. ホーム
  2. ios

[解決済み] CFNetwork SSLHandshakeに失敗しました(-9824) NSURLSession/NSURLConnection HTTPのロードに失敗しました(kCFStreamErrorDomainSSL, -9824)

2022-01-30 15:02:43

質問

iOS 9 で以下のコードを使用して https サーバーに post リクエストを送信しています。

[NSURLConnection sendSynchronousRequest:request returningResponse:&requestResponse error:&err];  

しかし、次のようなエラーが発生します。

CFNetwork SSLHandshake failed (-9824)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

以下のようにinfo.plistに例外を追加してみました。

<key>NSAppTransportSecurity</key>  
<dict>
    <key>NSExceptionDomains</key>
    <dict>
    <key>www.myserver.com</key>
    <dict>
    <key>NSIncludesSubdomains</key>
    <true/>
    <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
    <true/>
    <key>NSTemporaryExceptionMinimumTLSVersion</key>
    <string>TLSv1.1</string>
</dict>

また、私は

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

実機では動くが、シミュレータでは動かない

解決方法は?

  1. <ブロッククオート

    NSURLConnectionからNSURLSessionにするとうまくいきました。

以下のように解決できました(NSURLConnectionは非推奨のため、NSURLSessionを使用する必要があります)。

NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

[NSURLConnection sendAsynchronousRequest:request
                                queue:[NSOperationQueue mainQueue]
                    completionHandler:^(NSURLResponse *response, NSData  *data, NSError *error) {
 // ... 
}];

に変換されます。

NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                     completionHandler:
 ^(NSData *data, NSURLResponse *response, NSError *error) {
     // ...
  }];

[task resume];

NSURLConnectionからNSURLSessionへ

  1. Info.plistにも含まれているので、ドキュメントを参照してください。

Info.plistのリファレンス

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
  <key>yourdomain.net</key>
  <dict>
  <key>NSIncludesSubdomains</key>
  <true/>
  <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
  <true/>
  <key>NSTemporaryExceptionMinimumTLSVersion</key>
  <string>1.2</string>
  <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
  <false/>
  </dict>
  </dict>
</dict>

  1. そして最終的には

アナウンスです。Amazon SDK for iOSとのログイン統合時にCFNetworkのSSLHandshakeに失敗(-9824)する。 カテゴリへ戻る カテゴリへ戻る

Amazon SDK for iOSとのログイン統合時にCFNetwork SSLHandshakeに失敗(-9824) カテゴリへ戻る カテゴリへ戻る

api.amazon.comからyourdomain.netに変更するだけです。

お役に立てれば幸いです。