web-dev-qa-db-ja.com

トランスポートセキュリティにより、クリアテキストのHTTPがブロックされました

次のエラーメッセージに従ってHTTPモードを有効にするためにinfo.plistにどのような設定を入れる必要がありますか?

トランスポートセキュリティは、安全ではないため、平文のHTTP(http://)リソースのロードをブロックしました。一時的な例外はアプリのInfo.plistファイルで設定できます。

Xcode

私のドメインはexample.comだとします。

1380
Jeef

Xcode 8.0とSwift 3.0またはSwift 2.2、さらにはObjective Cを使用している場合

Enter image description here

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
368
Anit Kumar

つかいます:

Enter image description here

.plistファイルの NSAllowsArbitraryLoads キーを _ yes _ の下の NSAppTransportSecurity に設定する必要があります。

Plist configuration

914
CristiCh

これが視覚的な設定です。

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI

810
William Cerniuk

フォーラムの投稿Application Transport Security? /を参照してください。

またページiOS 9およびOSX 10.11でのApp Transportセキュリティ例外の設定

たとえば、次のように特定のドメインを追加できます。

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>example.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>

遅延オプションは次のとおりです。

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

注意:

info.plistはXMLファイルなので、このコードをファイル内の任意の場所に配置できます。

701
KMLong

これはテストされ、iOS 9 GM seedで動作していました - これは 特定の ドメインがHTTPSの代わりにHTTPを使用できるようにする設定です:

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSAllowsArbitraryLoads</key> 
      <false/>
       <key>NSExceptionDomains</key>
       <dict>
            <key>example.com</key> <!--Include your domain at this line -->
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
       </dict>
</dict>

NSAllowsArbitraryLoadsfalseである必要があります。これは all 安全でない接続を許可しないが、例外リストではHTTPSなしの some ドメインへの接続が許可されるためです。

314
Sound Blaster

これはplistにこれを追加するための素早い回避策です(しかし推奨されません):

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

これは( Appleのドキュメント によると):

NSAllowsArbitraryLoads
NSExceptionDomains辞書にリストされていないドメインに対してApp Transport Securityを無効にするために使用されるブール値。リストされたドメインはそのドメインに指定された設定を使用します。

デフォルト値のNOでは、すべての接続に対してデフォルトのApp Transport Security動作が必要です。

私は本当にリンクを推薦します:

それは私が理由とすべての意味を理解するのを助けます。

以下のXML(Info.plistファイル内)は以下のようになります。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

すべてのページへの任意の呼び出しを許可しませんが、PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDEを指定すると、その接続でHTTPプロトコルを使用できます。

上記のXMLに追加することができます:

<key>NSIncludesSubdomains</key>
<true/>

指定したアドレスのサブドメインに対して安全でない接続を許可したい場合。

最善のアプローチは、(falseに設定された)すべての任意のロードをブロックし、私たちが知っているアドレスだけが問題ないことを許可するために例外を追加することです。

興味のある読者のために

2018更新:

Appleはこれをオフにすることを推奨していません - より多くの情報が セキュリティセッションに関して説明されている - 207セッションWWDC 2018 - にあります。

歴史的理由と開発段階のために元の答えを残す

139
Julian Król

why​​ _ についてより多くのコンテキストが欲しい人のために、これを修正する方法に加えて、これが起こっています、そして以下を読んでください。

IOS 9の導入により、アプリとWebサービス間の接続のセキュリティを向上させるために、アプリとそのWebサービス間の安全な接続はベストプラクティスに従う必要があります。ベストプラクティスの動作は、 App Transport Security によって強化されます。

  • 偶然の開示を防ぐ
  • 安全なデフォルトの動作を提供します。

App Transport Security Technote で説明したように、Webサービスと通信するときに、App Transport Securityには次の要件と動作があります。

  • サーバーは少なくともTransport Layer Security(TLS)プロトコルバージョン1.2をサポートしている必要があります。
  • 接続暗号は、前方機密を提供するものに限定されています(下記の暗号のリストを参照してください)。
  • 証明書は、2048ビット以上のRSAキーまたは256ビット以上の楕円曲線(ECC)キーを使用して、SHA256以上の署名ハッシュアルゴリズムを使用して署名する必要があります。
  • 無効な証明書はハードエラーとなり、接続できなくなります。

言い換えれば、あなたのWebサービスリクエストは、a。)HTTPSを使用すること、そしてb)TLS v1.2を使用して転送秘密で暗号化することです。

ただし、他の記事で説明したように、アプリのInfo.plistに安全でないドメインを指定することで、App Transport Securityからこの新しい動作をオーバーライドできます。


上書きするには、NSAppTransportSecurity> NSExceptionDomains辞書のプロパティをInfo.plistに追加する必要があります。次に、WebサービスのドメインをNSExceptionDomains辞書に追加します。

たとえば、Host www.yourwebservicehost.com 上のWebサービスに対するApp Transport Securityの動作を回避したい場合は、次のようにします。

  1. アプリをXcodeで開きます。

  2. Project NavigatorでInfo.plistファイルを見つけ、それを右クリックして別名で開く> ソースコードメニューオプションを選択します。プロパティリストファイルが右側のペインに表示されます。

  3. 以下のプロパティブロックをメインプロパティディクショナリの中(最初の<dict>の下)に置きます。


<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

追加のドメインに対して例外を提供する必要がある場合は、NSExceptionDomainsの下に別の辞書プロパティを追加します。

上で参照されたキーについてもっと知るためには、 これはすでに言及したtechnote を読んでください。

114
whyceewhite

Plistを直接編集するのは好きではありません。 GUIを使ってplistに簡単に追加することができます。

  • 左側のナビゲータでInfo.plistをクリックします。
  • メインエリアのデータを変更します。

    • 最後の行に+を追加
    • グループの名前を入力してください:App Transport Security Settings
    • グループを右クリックしてAdd Rowを選択
    • 任意の負荷を許可を入力
    • 右側の値をYESに設定します

Example

65
Vincent

Apple Document 1

Apple Document 2

これには2つの解決策があります。

解決策1:

  1. Info.plistファイルに、キーがNSAppTransportSecurityの辞書を追加します。
  2. キー'Allow Arbitrary Loads'を使って辞書の中に別の要素を追加する

Plist構造体は以下の図のように表示されます。

Solution 1

解決策2:

  1. Info.plistファイルに、キーがNSAppTransportSecurityの辞書を追加します。
  2. キー 'NSExceptionDomains'を使って辞書内に別の要素を追加
  3. NSDictionary型のキー'MyDomainName.com'を持つ要素を追加します
  4. NSIncludesSubdomains型のキー 'Boolean'を持つ要素を追加し、値をYESとして設定する
  5. NSTemporaryExceptionAllowsInsecureHTTPLoads型のキー 'Boolean'を持つ要素を追加し、値をYESとして設定する

Plist構造体は以下の図のように表示されます。

Solution 2

解決策2は選択されたドメインのみを許可するため、解決策2は優先されますが、解決策1はすべての安全でないHTTP接続を許可します。

25

転送セキュリティはiOS 9.0以降で利用できます。アプリケーション内でWSを呼び出そうとすると、この警告が表示される場合があります。

Application Transport Securityは、安全ではないため、クリアテキストのHTTP(http://)リソースの読み込みをブロックしました。一時的な例外はアプリのInfo.plistファイルで設定できます。

Info.plistに以下を追加すると、ATSが無効になります。

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
20
Malek Belkahla

開発例

これはATSをそのまま(=安全)に保ちながら、localhostへの接続をHTTPSではなくHTTPを介して行うことができるplistのスクリーンショットです。 Xcode 7.1.1で動作します。

Enter image description here

14
Sebastian

Info.plistに行きます

  1. 空のスペースを右クリックして、行追加をクリック
  2. キー名をNSAppTransportSecurityと書き、その下に
  3. 例外ドメインを選択し、これに新しいアイテムを追加する
  4. アクセスする必要があるドメイン名を書き留めます
  5. ドメインタイプをStringからDictionaryに変更し、新しいItemを追加します
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads。これは、真の値を持つブール値になります。 Look at the picture to follow it correctly
12

この技術情報 に記載されているように、使用する設定を自動的に実行できるかどうかを判断します。

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
11
ecotax

Appleによれば、一般的にATSを無効にすることはあなたがそうする正当な理由がない限り、アプリの拒絶につながるでしょう。それでも、安全にアクセスできるドメインには例外を追加する必要があります。

アップルには、使用する設定を正確に指示する優れたツールがあります。「ターミナル」で、次のように入力します。

/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever

そしてnscurlはこのリクエストが失敗したかどうかをチェックし、そしてさまざまな設定を試して、どれが成功したか、そして何をすべきかを正確に教えてくれます。たとえば、私が訪問したサードパーティのURLの場合、このコマンドはこの辞書が渡すことを私に伝えました:

{
    NSExceptionDomains = {
        "www.example.com" = {
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}

自分のサイトと自分の管理下にないサードパーティサイトを区別するには、たとえばキーNSThirdPartyExceptionRequiresForwardSecrecyを使用します。

10
gnasher729

2015-09-25(2015-09-18のXcodeアップデート後):

私は非怠惰な方法を使用しましたが、うまくいきませんでした。以下が私の試みです。

最初、

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

そして第二に、

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

最後に、私は怠惰な方法を使いました:

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

それは少し不安定かもしれませんが、私は他の解決策を見つけることができませんでした。

9
Heedoo

注:plist内の例外ドメインは小文字にする必要があります。

例:あなたはあなたのマシンを「設定」 - >「共有」の下で "MyAwesomeMacbook"と名付けました。あなたのサーバーは(テスト目的で)MyAwesomeMacbook.local:3000で動いています、そしてあなたのアプリは http://MyAwesomeMacbook.local:3000/files にリクエストを送る必要があります例外ドメインとして "myawesomemacbook.local"を指定してください。

-

あなたのinfo.plistは...を含みます.

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>
9
ObjectiveTC

Swift 4とxcode 10では、NSAllowsArbitraryLoadsをAllow Arbitrary Loadsに変更しました。だからそれはこのようになるでしょう:

<key>App Transport Security Settings</key>
<dict>
     <key>Allow Arbitrary Loads</key><true/>
</dict>
8
Faris

つかいます:

PList Screenshot to understand better

新しい項目 NSAppTransportSecurity をplistファイルにタイプ Dictionary で追加し、次にサブ項目 NSAllowsArbitraryLoads をタイプ Boolean の辞書に追加します。そしてブール値 _ yes _ を設定します。これは私のために働きます。

7
Tejinder

それはそこに着く方法を言及する価値があるかもしれません...

Info.plistは、Main.storyboardまたはviewController.Swiftの下にあるファイルの1つです。

初めてクリックすると、通常は表形式になっているので、ファイルを右クリックして「別名で開く」ソースコードを選択し、次に末尾に向かって以下のコードを追加します。

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

上のコードをコピーして貼り付けます

 "</dict>
</plist>"

これで終わりです。

6
Naishta

問題27.10.15に直面しているXcode 7.1用のアップデート:

Info.plistの新しい値は「App Transport Security Settings」です。そこから、この辞書は含まれるべきです:

  • 任意の荷重を許可する= YES
  • 例外ドメイン(ここにあなたのhttpドメインを挿入してください)
5
MkaysWork

WKWebViewがいつも白くて何もロードしない理由を見つけようとここに来た人のために(まさにここに記述されているように どのように私はWKWebViewをSwiftでそしてmacOSアプリケーション用に動かせるでしょう

上記のすべてのロケット科学がうまくいかない場合は、明らかにサンドボックスの設定を確認してください。

sandbox settings]

Swiftやcocoaに慣れていなくても、プログラミングの経験が豊富なので、この解決策を見つけるために約20時間かかります。何十もの流行に敏感なiOSチュートリアルもAppleの基調講演もない - この小さなチェックボックスについては何も言及されていない。

2

ターゲットサイトがNSExceptionDomainsを介して外部ドメインからリソース(例:jsファイル)をロードする可能性があるため、httpを使用しても効果が同時に適用されない場合があります。これらの外部ドメインをNSExceptionDomainsに追加することで解決できます。

どのリソースをロードできないかを調べるには、リモートデバッグを使用してみてください。これがチュートリアルです: http://geeklearning.io/Apache-cordova-and-remote-debugging-on-ios/

1
Nurlan

デフォルトでは、iOSはHTTPS APIのみを許可しています。 HTTPは安全ではないため、Appトランスポートセキュリティを無効にする必要があります。 ATSを無効にする2つの方法があります: -

1.プロジェクトinfo.plistにソースコードを追加し、ルートタグに次のコードを追加します。

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

2.プロジェクト情報を使用する。

左ペインのプロジェクトでプロジェクトをクリックし、ターゲットとしてプロジェクトを選択して、情報タブを選択します。次の構造に辞書を追加する必要があります。

enter image description here 

0
varunrathi28

Cordovaの場合、ios.jsonに追加したい場合は、次の手順に従ってください。

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

そしてそれはの中にあるべきです:

"*-Info.plist": {
   "parents": {
   }
}
0
zeusstl