トランスポートセキュリティがクリアテキストHTTPをブロックしました

2015年07月07日に質問されました。  ·  閲覧回数 805.3k回  ·  ソース

Jeef picture
2015年07月07日

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

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

Xcode

私のドメインがexample.comと仮定します。

回答

User123335511231 picture
2015年08月04日
964

NSAppTransportSecurityを使用します。

Enter image description here

info.plistファイルのNSAppTransportSecurityディクショナリでNSAllowsArbitraryLoadsキーをYESに設定する必要があります。

Plist configuration

William Cerniuk picture
2015年11月15日
833

視覚的な設定は次のとおりです。

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI

KMLong picture
2015年07月07日
722

アプリケーショントランスポートセキュリティのフォーラム投稿を参照してください

また、 iOS9およびOSX10.11でのアプリトランスポートセキュリティ例外の設定のページもあります。

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

<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ファイルであるため、このコードをファイル内のどこにでも配置できます。

Anit Kumar picture
2016年10月28日
512

Xcode8.0以降およびSwift2.2以降、あるいはObjective Cを使用している場合:

Enter image description here

任意のサイトへのHTTP接続を許可する場合は、次のキーを使用できます。

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

接続して追加するドメインがわかっている場合:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
Sound Blaster picture
2015年09月14日
337

これはテストされ、iOS 9 GMシードで動作していました-これは、特定のドメインが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である必要があります。これは、すべての安全でない接続を許可一部のドメインに接続できます。

Julian Kr&#243;l picture
2015年09月01日
146

これは、これをplistに追加するための簡単な回避策です(ただし、お勧めしません)。

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

つまり( Appleのドキュメントによると):

NSAllowsArbitraryLoads
NSExceptionDomainsディクショナリにリストされていないドメインのAppTransportSecurityを無効にするために使用されるブール値。 リストされたドメインは、そのドメインに指定された設定を使用します。

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

私は本当にリンクをお勧めします:

これは、理由とすべての影響を理解するのに役立ちます。

以下の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セッションWWDC2018でより多くの情報を見つけることができます

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

whyceewhite picture
2015年09月22日
119

修正方法に加えて、なぜこれが発生しているの

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

  • 偶発的な開示を防ぎ、
  • 安全なデフォルトの動作を提供します。

App Transport Security Technoteで説明されているように、Webサービスと通信する場合、App TransportSecurityには次の要件と動作があります。

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

つまり、Webサービスリクエストは次のようにする必要があります。a。) HTTPSを使用し、b。)TLSv1.2を使用して転送秘密で暗号化する。

ただし、他の投稿で言及されているように、アプリのInfo.plistで安全でないドメインを指定することで、App TransportSecurityからこの新しい動作をオーバーライドできます。


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

たとえば、ホストwww.yourwebservicehost.com上のWebサービスのApp Transport Securityの動作をバイパスする場合は、次のようにします。

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

  2. プロジェクトナビゲータで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下に別の辞書プロパティを追加します。

上記で参照されているキーの詳細については、前述のテクニカルノートをお読みください。

Vincent picture
2015年11月06日
68

plistを直接編集するのは好きではありません。 GUIを使用して、簡単にplistに追加できます。

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

    • 最後の行に+を追加します
    • グループの名前を入力します: App Transport Security Settings
    • グループを右クリックして、 Add Rowを選択します
    • Allow ArbitraryLoadsと入力します
    • 右側の値をYESに設定します

Example

Jayprakash Dubey picture
2016年03月10日
28

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. タイプBooleanキー ' NSIncludesSubdomains 'で要素を追加し、値をYESとして設定します
  5. タイプBooleanキー ' NSTemporaryExceptionAllowsInsecureHTTPLoads 'で要素を追加し、値をYESとして設定します

Plist構造は、次の画像に示すように表示されます。

Solution 2

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

Malek Belkahla picture
2015年09月19日
20

トランスポートセキュリティは、iOS9.0以降で利用できます。 アプリケーション内でWSを呼び出そうとすると、次の警告が表示される場合があります。

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

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

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