web-dev-qa-db-ja.com

サポートサーバーでのiOS 9 ATS SSLエラー

Xcode 7をインストールし、iOS 9でアプリを実行しようとしました。悪名高いエラーが発生しています:Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made.問題は、サーバーがTLSv1.2をサポートしており、NSURLSessionを使用していることです。

では何が問題なのでしょうか?

20
YogevSitton

Appleは App Transport Security の完全な要件リストをリリースしました。

TLS v1.2で作業していたが、他の要件の一部が欠落していることが判明しました。

完全なチェックリストは次のとおりです:

  1. TLSには少なくともバージョン1.2が必要です。
  2. 接続暗号は、前方秘匿性を提供するものに限定されています(暗号のリストについては以下を参照してください)。
  3. このサービスには、少なくとも2048ビット以上のRSAキー、または256ビット以上の楕円曲線(ECC)キーのいずれかのSHA256指紋を使用した証明書が必要です。
  4. 証明書が無効な場合、ハード障害が発生し、接続できなくなります。

受け入れられる暗号は次のとおりです:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
31
YogevSitton

IOS9では、Apple App Transport Security(ATS)と呼ばれる新しい機能が追加されました。

ATSは、HTTPSの使用など、ネットワークコール中にベストプラクティスを実施します。

Appleプレリリースドキュメント:

ATSは偶発的な開示を防ぎ、安全なデフォルト動作を提供し、採用が容易です。新しいアプリを作成するか、既存のアプリを更新するかに関係なく、できるだけ早くATSを採用する必要があります。

新しいアプリを開発する場合は、HTTPSのみを使用する必要があります。既存のアプリがある場合は、現時点でできるだけHTTPSを使用し、アプリの残りの部分をできるだけ早く移行する計画を作成する必要があります。

Info.plistに以下のキーを追加して、参照してください。

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

特定の例外を追加することもできますが、

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <false/>
            <key>NSExceptionAllowInsecureHTTPSLoads</key>
            <false/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>

        ...

    </dict>
</dict>
11
Nilesh Patel

this doc that Apple提供。

IOS 9の実行時に同様の問題があり、それを修正するためにNSAppTransportSecurity辞書を追加し、NSAllowsArbitraryLoadsBooltrueに設定してinfo.plistファイルに追加しました。

これがお役に立てば幸いです!

5
user5082751

私にとってプロキシは別のソースからインターネットを使用しようとするとブロックされていた問題を解決します。 Wifi、Lanなど.

2
Nagarjun

IOS9でも同じ問題がありました: SSLlab 結果はサーバー上のプロトコル/暗号に問題はありませんでしたが、iOS/9.3.5でSSL-エラー:

Connection cannot be established.

私の愚かな間違いは、リダイレクトがあったこと、すなわちNGINX(およびApacheでも同様)でした:

rewrite /calendar     $scheme://www.example.org/resources/calendar;

ユーザーが設定によって/calenderにアクセスした場合:

https://example.org/calendar

サーバーが別のドメインにリダイレクトされ、SSL接続の確立が中断されました。

次のようにリダイレクトを設定すると修正されました。

rewrite /calendar     $scheme://$server_name/resources/calendar;
0
Rainer Keller