CFNetwork SSLHandshakeがiOS 9で失敗しました 質問する

CFNetwork SSLHandshakeがiOS 9で失敗しました 質問する

iOS 9 ベータ 1 を使用している方でこの問題が発生した方はいらっしゃいますか?

標準の NSURLConnection を使用して Web サービスに接続し、Web サービスを呼び出すとすぐに以下のエラーが発生します。これは現在 iOS 8.3 で動作しています。

ベータ版のバグの可能性はありますか?アイデアやご意見があれば教えてください。iOS 9の開発はまだ初期段階であることは承知しています。

エラーの全文は次のとおりです:

CFNetwork SSLHandshake に失敗しました (-9824) NSURLSession/NSURLConnection HTTP ロードに失敗しました (kCFStreamErrorDomainSSL、-9824)

 NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://mywebserviceurl"]];
        NSURLResponse * response = nil;
        NSError * error = nil;
        NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
                                                  returningResponse:&response
                                                              error:&error];

ベストアンサー1

iOS 9 および OSX 10.11 では、アプリの Info.plist ファイルで例外ドメインを指定しない限り、データを要求する予定のすべてのホストに対して TLSv1.2 SSL が必要です。

Info.plist 構成の構文は次のようになります。

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow insecure HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

アプリケーション (たとえば、サードパーティの Web ブラウザー) が任意のホストに接続する必要がある場合は、次のように構成できます。

<key>NSAppTransportSecurity</key>
<dict>
    <!--Connect to anything (this is probably BAD)-->
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

これを行わなければならない場合は、まだ使用していない場合は、サーバーを更新して TLSv1.2 と SSL を使用するようにするのが最善でしょう。これは一時的な回避策と見なしてください。

現時点では、プレリリース版のドキュメントでは、これらの構成オプションについて具体的な言及はありません。言及されたら、回答を更新して、関連するドキュメントへのリンクを追加します。

おすすめ記事