web-dev-qa-db-ja.com

iOS9エラー「SSLエラーが発生したため、サーバーへの安全な接続を確立できません」

既存のプロジェクトをiOS 9にアップグレードしてから、エラーが発生し続けます。

SSLエラーが発生し、サーバーへの安全な接続を確立できません。

98
Nanda

IOS9の場合、AppleはiOS 9で根本的な決断を下し、 App Transport Security(ATS) の一部としてiOSアプリからの保護されていないHTTPトラフィックをすべて無効にしました。

単純にATSを無効にするには、openInfo.plistと入力して次の行を追加します。

<key>NSAppTransportSecurity</key>
  <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
  </dict>
106
Tony TRAN

任意のロードを許可すること(NSAllowsArbitraryLoads = true)がよい回避策ですが、ATSを完全に無効にするのではなく、許可するHTTP接続を有効にする必要があります。

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

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

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

*を参照 App Transport Security(ATS)

enter image description here

14
TechSeeko

特定のドメインのみをターゲットにしている場合は、これを試してアプリケーションのInfo.plistに追加できます。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
13
Nathan Noble

IOS 9.0.2は有効なHTTPSエンドポイントへの要求を中断しているようです。私の現在の疑いは、それがSHA-256証明書を必要としているか、それがこのエラーで失敗するということです。

再現するには、SafariでUIWebViewを調べて、任意のHTTPSエンドポイントに移動してみます。

location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js"
// [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0)

今すぐGoogleにアクセスしてみてください(もちろん、彼らはSHA-256証明書を持っています)。

location.href = "https://google.com"
// no problemo

トランスポートセキュリティに例外を追加すると(上記の@stéphane-bruckertの回答で概説されているように)、これを修正できます。また、NSAppTransportSecurityを完全に無効にすることでもうまくいくと思いますが、完全に無効にするとアプリのレビューが危険にさらされる可能性があることを私は読んでいます。

[編集] NSExceptionDomainsをtrueに設定したままでも、接続しているドメインをNSExceptionAllowsInsecureHTTPLoads辞書に列挙するだけでこの問題が解決することがわかりました。 :\

6
steve

HTTPS URLを https://www.mywebsite.com のように指定した場合も同じエラーが発生します。ただし、3つのWを指定せずに指定すると、正常に動作します。 https://mywebsite.com

2
Hashim Akhtar

問題はサーバー側のSSL証明書です。何かが干渉しているか、証明書がサービスと一致しません。たとえば、サイトがwww.mydomain.comのSSL証明書を持っているときに、使用するサービスがmyservice.mydomain.comで実行されているとします。それは違うマシンです。

2
Helge Becker

Xcodeプロジェクト - > goto info.plistをクリックしてから追加(App Transport Security Settings)をクリックし、展開して任意の負荷を許可YESを設定します。ありがとう

2

私の問題はNSURLConnectionで、それはiOS9で廃止予定だったので、私はすべてのAPIをNSURLSessionに変更し、それが私の問題を修正しました。

NSURLConnectionはiOS9で廃止予定

0
Akila Wasala

私の場合、私のコンピューターの日付が現在の日付より遅れているため、私はシミュレーターでこの問題に直面しました。あなたがSSLエラーに直面したときにもこのケースをチェックしてください。

0
Teena nath Paul