126

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

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

4

13 に答える 13

135

iOS9 に関して、Apple は iOS 9 で抜本的な決定を下し、App Transport Security (ATS)の一部として、iOS アプリからのすべてのセキュリティで保護されていない HTTP トラフィックを無効にしました。

ATS を単純に無効にするには、Info.plistを開き、次の行を追加して、この手順に従います。

<key>NSAppTransportSecurity</key>
  <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
  </dict>
于 2015-09-24T08:06:36.390 に答える
72

任意のロード ( 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>
于 2015-09-29T22:15:44.170 に答える
16

特定のドメインのみをターゲットにしている場合は、アプリケーションの 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>
于 2015-11-10T21:40:05.560 に答える
15

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)を参照

ここに画像の説明を入力

于 2015-10-01T08:00:35.283 に答える
6

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[編集] dictで接続しているドメインを列挙するだけで、NSExceptionAllowsInsecureHTTPLoadstrue に設定したままでもこの問題が解決することがわかりました。:\

于 2015-10-05T18:53:31.647 に答える
2

問題は、サーバー側の SSL 証明書です。何かが干渉しているか、証明書がサービスと一致していません。たとえば、サイトに www.mydomain.com の ssl 証明書があり、使用しているサービスが myservice.mydomain.com で実行されている場合などです。あれは別の機械です。

于 2015-10-01T11:37:28.837 に答える
0

Xcode プロジェクト -> info.plist に移動し、[+] ボタンをクリックしてから [追加] (App Transport Security 設定) を展開し、[任意の読み込みを許可] を [はい] に設定します。ありがとう

于 2016-10-24T09:42:01.730 に答える