iOS10 ATS(App Transfer Security)のApple公式ドキュメントのまとめと翻訳メモ

#2016/12/21 Apple、ATSが要求される時期を延期すると発表
https://developer.apple.com/news/?id=12212016b

> Supporting App Transport Security
> December 21, 2016
> 
> App Transport Security (ATS), introduced in iOS 9 and OS X v10.11, improves user security and privacy by requiring apps to use secure network connections over HTTPS. At WWDC 2016 we announced that apps submitted to the App Store will be required to support ATS at the end of the year. To give you additional time to prepare, this deadline has been extended and we will provide another update when a new deadline is confirmed. Learn more about ATS.

2017年1月現在、いまだデッドラインは発表されていません。
まだATSをサポートできていないアプリは今のうちに改修しておきましょう。

#Cocoa Keys

Cocoa keys (プレリリース版から正式版になりましたね。URLだけ変わった模様)
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

~~Cocoa keys (iOS10プレリリース版[^1])~~
~~https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html~~

このApple公式ドキュメントのまとめと一部翻訳メモです。（ATSのところだけ）
英語が得意ではない＆自分で理解するためのメモとして書いているので、わかりにくいところ、間違っているところが多々あるかと思いますが、ご容赦ください。あくまで参考程度にご覧ください。間違いがありましたら、ご指摘いただけると嬉しいです。

※ このドキュメントは、Appleデベロッパに関わらず誰でも閲覧できる公開情報なので、NDA違反ではありません。

#まとめのまとめ
下記の「まとめ」を踏まえて、一般的なiOS8以上(iOS9も10も)をサポートしているアプリのよくある対応ケースをまとめると、以下のようになると思います。

- NSAllowsArbitraryLoadsをYESにした上で、
- NSAllowsArbitraryLoadsInMedia、NSAllowsArbitraryLoadsInWebContent、NSAllowsLocalNetworking をYESにする
- さらに、それ以外のドメインでHTTPのものについては、NSExceptionDomains で例外設定する
- NSAllowsArbitraryLoadsInMedia を有効にするために、AVFoundationを使った通信は、secure HLSなどにし、個人情報を含めないようにする
- TLSバージョンは、TLSv1.2以上にする（それ未満では正当な理由が必要）
- NSAllowsArbitraryLoads をYESにしているため、AppStoreレビューで正当な理由を説明する
- NSExceptionDomainsで例外設定し、NSExceptionAllowsInsecureHTTPLoadsをYESにしたもの（つまり、HTTP通信でなければいけない例外ドメイン設定をした場合）について、AppStoreレビューで正当な理由を説明する
- サーバのATS対応状況の調査は、nscurlを利用すると捗りそう

#まとめ

###ATSの対象
- iOS9.0以上、macOS10.11以上のSDKとリンクされたアプリとAppExtensions
- WKWebView
- UIWebView (iOS only)
- WebView (macOS only)
- NSURLSession
- NSURLConnection

※CFNetworkも対象だと思われるがこのドキュメントには明記されていない
追記:CFNetworkも使い方次第ではATS制限にかからない模様。そういう意味で、ここに対象とは書かれていないと思われます。

###ATSの対象外
- Appleが提供している低レベルネットワークAPI(具体的な記述はない)
- もしくは、サードパーティのネットワークライブラリを利用
- iOS9.0未満、macOS10.11未満の環境でアプリを動作させる時はATSは無視される

###iOS10以降

```
NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean // 💀 Default value is NO
    NSAllowsArbitraryLoadsInMedia : Boolean // Default value is NO
    NSAllowsArbitraryLoadsInWebContent : Boolean // Default value is NO
    NSAllowsLocalNetworking : Boolean // Default value is NO
    NSExceptionDomains : Dictionary {
        <domain-name-string> : Dictionary {
            NSIncludesSubdomains : Boolean // Default value is NO
            NSExceptionAllowsInsecureHTTPLoads : Boolean // 💀 Default value is NO
            NSExceptionMinimumTLSVersion : String // 💀 Default value is TLSv1.2
            NSExceptionRequiresForwardSecrecy : Boolean   // Default value is YES
            NSRequiresCertificateTransparency : Boolean   // Default value is NO
        }
    }
}
```


###iOS9

```
NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean // 💀 Default value is NO
    NSExceptionDomains : Dictionary {
        <domain-name-string> : Dictionary {
            NSIncludesSubdomains : Boolean // Default value is NO
            NSExceptionAllowsInsecureHTTPLoads : Boolean // 💀 Default value is NO
            NSExceptionMinimumTLSVersion : String // 💀 Default value is TLSv1.2
            NSExceptionRequiresForwardSecrecy : Boolean   // Default value is YES
        }
    }
}
```


###iOS8以下
ATSの制限は受けない

###AppStoreレビューで、正当な理由を説明しないといけないキー
上記、💀で示しています。ドクロに深い意味はありません。

- NSAllowsArbitraryLoads (iOS9以上)
- NSExceptionAllowsInsecureHTTPLoads (iOS9以上)
- NSExceptionMinimumTLSVersion (iOS9以上)

###AppStoreレビューで、正当な理由の例
AppStoreへあなたのアプリを提出する時、なぜあなたのアプリがデフォルトのセキュアな通信を使うことができないのかを特定するための十分な情報を提供する必要がある。

いくつかの考慮すべき適切な正当性の例は、次の通り：

- セキュアな通信をサポートしていない、他で管理されているサーバに、通信しなければならない
- セキュアな通信を使うためにアップグレードすることができないデバイスに接続しなければならない。そして、パブリックなホスト名経由で通信しなければならない
- 様々なソースの組み込まれたWebコンテンツを提供しなければならない。しかし、 NSAllowsArbitraryLoadsInWebContent キーをサポートしているクラスを使うことができない


###注意点
- NSAllowsArbitraryLoadsInMedia キー
	- このキーは、そのアプリ全体の通信に対して効果があるが、例外ドメインディクショナリの中のドメイン名に対しては、任意のmediaロードが許可されない。
	- このキーは、FairPlayやsecure HLSによってファイル保護されているような、既に暗号化されているmediaのロードで、かつ、個人情報を含まない時に使うこと
	- このキーをInfo.plistファイルに追加すると、このキーの値に関わらず、NSAllowsArbitraryLoads キーの値は無視される。

- NSAllowsArbitraryLoadsInWebContent キー
	- 古いバージョンのiOSとOSXをサポートするには、あなたは、このキーを使い、さらに手作業でATS設定を行う。このキーの値をYESにし、さらに、NSAllowsArbitraryLoads のサブキーを設定する。
もし、あなたがこのキーをInfo.plistファイルに追加すると、このキーの値に関わらず、NSAllowsArbitraryLoads キーの値は無視される

- NSAllowsLocalNetworking キー
	- もし、あなたがYESをセットすると、iOS10以上、macOS 10.12以上で、NSAllowsArbitraryLoadsキー は無視される。
	- 組み込まれたブラウザでiOS9以下やOSXv10.11以下でも動作し続けることを許可する（この振る舞いを得るために、このキーはYESにセットし、NSAllowsArbitraryLoads キーもYESにする）

- いずれのキーもiOS10以上から利用できるキーで、どれを設定しても、設定値に関わらず、NSAllowsArbitraryLoadsの値は無視されるとあります。ということは、iOS10以上では、InMediaでもInWebContentでもLocalNetworkingでもないその他のhttp通信したいものは全てNSExceptionDomainsの例外設定が必要ということ？？（まだ実機では未検証ですが、おそらくそうなると思われます）

###iOS9時代のATSからの主な変更点
- キーの追加 NSAllowsArbitraryLoadsInMedia,NSAllowsArbitraryLoadsInWebContent,NSAllowsLocalNetworking
- キーの追加 NSRequiresCertificateTransparency
- キーの削除 NSThirdPartyExceptionAllowsInsecureHTTPLoads,NSThirdPartyExceptionRequiresForwardSecrecy,NSThirdPartyExceptionMinimumTLSVersion
	- キーでサードパーティーかどうかの指定がなくなった。代わりにAppStoreレビューでサードパーティの場合は説明が必要。



#以下、翻訳メモです。間違っている部分もあるので参考程度にご覧ください。


## Key Summary
- NSAppTransportSecurity
   - Specifies changes to the default strong security for HTTP connections in iOS and OS X apps and app extensions. See NSAppTransportSecurity for details.
   - iOS 9.0 and later, OS X v10.11 and later

--

- NSAppTransportSecurity
   - iOSとOSXのアプリとAppExtentionsのHTTPコネクションのためのデフォルトの強力なセキュリティの変更を定義する。
   - iOS 9.0 以降、OSX v10.11以降


## Detail
- NSAppTransportSecurity
    - NSAppTransportSecurity (Dictionary - iOS, OS X) Use this key to describe your app’s intended HTTP connection behavior if you require exceptions from best security practices or you want to enable new security features.

-- 

- NSAppTransportSecurity
    - NSAppTransportSecurity(Dictionary - iOS, OSX)
    - あなたのアプリのHTTP通信の振る舞いを意図的に述べるためにこのキーを利用しなさい。もし、最も良いセキュリティのプラクティスからの例外をあなたが要求するか、あなたが新しいセキュリティ機能を有効にしたい時に。

-- 

On Apple platforms, a networking security feature called App Transport Security (ATS) is available to apps and app extensions, and is enabled by default. It improves privacy and data integrity by ensuring your app’s network connections employ only industry-standard protocols and ciphers without known weaknesses. This helps instill user trust that your app does not accidentally leak transmitted data to malicious parties.

--

Appleのプラットフォームにおいて、App Transfer Security(ATS)と呼ばれるネットワークのセキュリティ機能は利用可能です。アプリやApp Extentionで。また、それらはデフォルトで有効化されている。
これは、プライバシーやデータの誠実さを改善する。
あなたのアプリのネットワーク通信に、知られている脆弱性がない、業界標準のプロトコルと暗号化だけを利用することによってこれを確実にする。

-- 

By configuring this key’s value in your app’s Info.plist file, you can customize the security of your network connections in a variety of ways. You can:

--

あなたのアプリのinfo.plistに、このキーの値を設定することによって、あなたはカスタマイズすることができる、あなたのネットワーク通信のセキュリティを。様々な方法で。あなたは、以下のことが可能です：

-- 

- Allow insecure communication with particular servers
- Allow insecure loads for web views or for media, while maintaining ATS protections elsewhere in your app
- Enable new security features such as Certificate Transparency

--

- 特定のサーバへの保証のない通信を許可する
- ATSプロテクション以外のあなたのアプリの中のプロテクションを保つ間、保証のないweb表示やmediaのロードを許可する。
- 新しいセキュリティの機能を有効にする、Certificate Transparency のような。

-- 

The NSAppTransportSecurity key is supported in iOS 9.0 and later and in OS X v10.11 and later, and is available in both apps and app extensions.

Starting in iOS 10.0 and later and in macOS 10.12 and later, the following subkeys are supported:

- NSAllowsArbitraryLoadsInMedia
- NSAllowsArbitraryLoadsInWebContent
- NSRequiresCertificateTransparency
- NSAllowsLocalNetworking

-- 

NSAppTransportSecurity キーは、iOS9.0以降と、OSX v10.11 以降で、サポートされている。そして、アプリでもAppExtensionでも利用可能。

iOS10.0以降、macOS 10.12以降からは、以下のサブキーがサポートされている：

- NSAllowsArbitraryLoadsInMedia
- NSAllowsArbitraryLoadsInWebContent
- NSRequiresCertificateTransparency
- NSAllowsLocalNetworking

-- 

## ATS Configuration Basics


App Transport Security (ATS) is enabled by default for apps linked against the iOS 9.0 or OS X v10.11 SDKs or later, as indicated by the default Boolean value of NO for the NSAllowsArbitraryLoads key. This key is at the root level of the NSAppTransportSecurity dictionary.

-- 

App Transport Security(ATS)は、デフォルトで有効化されている。iOS9.0 や OSX v10.11 SDK以降とリンクしているアプリにおいて。NSAllowsArbitraryLoadsキーのデフォルトのBoolean値はNO に示されている。このキーは、NSAppTransportSecurity dictionary の ルートレベルのキーです。

-- 

With ATS enabled, HTTP connections must use HTTPS (RFC 2818 https://tools.ietf.org/html/rfc2818). Attempts to connect using insecure HTTP fail. ATS employs the Transport Layer Security (TLS) protocol version 1.2 (RFC 5246 https://tools.ietf.org/html/rfc5246). For background on secure Internet connections, read HTTPS Server Trust Evaluation.

-- 

ATSを有効化すると、HTTP通信は、HTTPS(RFC2818)を利用しなければならない。保証のないHTTP通信の利用を試みると、失敗する。
ATSは、TLSプロトコルバージョン 1.2(RFC 5246)を要求する。
インターネットコネクションのセキュリティの背景については、HTTPS Server Trust Evaluation(https://developer.apple.com/library/prerelease/content/technotes/tn2232/_index.html#//apple_ref/doc/uid/DTS40012884)を読んでください。

-- 

The following listing represents the overall structure of the NSAppTransportSecurity dictionary, showing all possible keys, all of which are optional. Keep this structure in mind as you configure each element of the dictionary, as needed, for your app:

-- 

以下のリストは、一例である。NSAppTransportSecurity dictionaryの全体構造の。
全ての可能なキーは、表示されている。全てのキーは、オプショナルである。
この構造を覚えておいてください。それぞれのDictionaryの要素は、あなたのアプリで必要な場合に設定することを。

```
NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean
    NSAllowsArbitraryLoadsInMedia : Boolean
    NSAllowsArbitraryLoadsInWebContent : Boolean
    NSAllowsLocalNetworking : Boolean
    NSExceptionDomains : Dictionary {
        <domain-name-string> : Dictionary {
            NSIncludesSubdomains : Boolean
            NSExceptionAllowsInsecureHTTPLoads : Boolean
            NSExceptionMinimumTLSVersion : String
            NSExceptionRequiresForwardSecrecy : Boolean   // Default value is YES
            NSRequiresCertificateTransparency : Boolean
        }
    }
}
```

The NSAppTransportSecurity dictionary structure expresses two levels of configuration. At the primary level are keys to configure ATS protections for your app’s network connections in general. Also at this level is the NSExceptionDomains key; this key lets you opt in to custom configuration for named domains, relative to ATS defaults, as needed.

The primary ATS keys are:

-- 

NSAppTransportSecurity ディクショナリの構造は、２つの設定レベルを表現する。最も重要なレベルは、あなたのアプリの全般的なネットワーク通信のATSプロテクション設定のキー。
これと同様のレベルは、NSExceptionDomains キー である：
このキーはあなたのドメイン名でのカスタム設定を参加させる、
ATSのデフォルトは相対的に、必要であれば。


最も重要なATSキーは：

-- 

- NSAllowsArbitraryLoads 


If set to YES, disables all ATS restrictions for all network connections, apart from the connections to domains that you configure individually in the optional NSExceptionDomains dictionary. Default value is NO.

Note: Setting this key’s value to YES triggers App Store review and requires justification.

-- 

- NSAllowsArbitraryLoads 


もし、YESがセットされると、全てのATSの規制が無効化される、全てのネットワーク通信で。オプショナルな NSExceptionDomains ディクショナリでの個別のドメイン設定とは異なって。デフォルト値はNO。

注釈：このキーをYESにセットすると、AppStoreのレビューにて、正当な理由が求められる。

-- 

- NSAllowsArbitraryLoadsInMedia 


If set to YES, disables all ATS restrictions for media that your app loads using the AV Foundation framework. Employ this key only for loading media that are already encrypted, such as files protected by FairPlay or by secure HLS, and that do not contain personalized information. Default value is NO.

-- 

- NSAllowsArbitraryLoadsInMedia 


もし、YESがセットされると、全てのATSの規制が無効化される、あなたのアプリでのAVFoundationフレームワークを利用したmediaのロードで。このキーは、既に暗号化されているmediaのロードの時だけ要求する。例えば、FairPlayやsecure HLSでファイルが保護されている場合で、加えて、個人情報を含まない場合。デフォルト値は、NO。

-- 

- NSAllowsArbitraryLoadsInWebContent


If set to YES, disables all ATS restrictions for requests made from web views. This lets your app use an embedded browser that can display arbitrary content, without disabling ATS for the rest of your app. Default value is NO.

--

- NSAllowsArbitraryLoadsInWebContent


もし、YESがセットされると、全てのATSの規制が無効化される、web viewからのリクエストの。これは、あなたのアプリが利用する組み込まれたブラウザで、任意のコンテンツを表示することができる場合。
あなたのアプリの他のATSを無効化させることなく。デフォルト値はNO。

-- 

- NSAllowsLocalNetworking


If set to YES, allows loading of local resources without disabling ATS for the rest of your app. Default value is NO.


--

- NSAllowsLocalNetworking


もし、YESがセットされると、ローカルリソースのロードを許可する、あなたのアプリの他のATSを無効化させることなく。デフォルト値はNO。

--

- NSExceptionDomains


Optionally include this dictionary to configure ATS for one or more named domains.

If you add this key to your NSAppTransportSecurity dictionary, any domains you then name within the dictionary obtain the default, full ATS protections—irrespective of the value you set for the global NSAllowsArbitraryLoads key. Subkeys of a domain-name key then let you alter that domain’s ATS protections from its defaults.

--

- NSExceptionDomains

一つ以上のドメイン名をATSを設定するために、このディクショナリにオプショナリに含める

もし、あなたがこのキーを、いかなるドメインも、NSAppTransportSecurityに追加すると、名前はディクショナリのデフォルトを取得する
全般的なNSAllowsArbitraryLoads キーにセットした値に関わらず、完全なATSプロテクション。
ドメイン名のサブキーで指定したものは、ドメインのATSプロテクションの標準から変わる。


--

Read important, detailed information on the preceding primary keys in Table 2(https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW34).

--

重要事項を読んでください。前述の最も重要なキーの詳細情報は表2(https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW34)に詳細情報があります。


--

At the secondary level are the subkeys within the optional ATS NSExceptionDomains dictionary. The step of including an NSExceptionDomains dictionary in your app’s Info.plist file:

- Creates a container for one or more domain-specific dictionaries, letting you specify customized, per-domain HTTP connection properties
- Removes any general, app-wide ATS customizations you’ve specified using primary ATS keys

For example, if you’ve added NSAllowsArbitraryLoadsInMedia key for your app in general, domains named in the exception domains dictionary do not allow arbitrary media loading.

--

２つ目のレベルは、ATS NSExceptionDomains ディクショナリのサブキーです。あなたのアプリのInfo.plistファイルのNSExceptionDomains ディクショナリに含めるステップです：

- 一つ以上のドメインを記述するディクショナリのコンテナを作成する。HTTP通信のプロパティをドメインごとにカスタマイズを指定できる

- 全般的な設定は削除される。アプリに広がったあなたが最も主要なATSキーを利用するよう指定したATSカスタマイズ

例えば、もしあなたが追加した NSAllowsArbitraryLoadsInMedia キーは、あなたのアプリ全般に対して効果があるが、例外ドメインディクショナリの中のドメイン名は、任意のmediaロードが許可されない。

-- 

Having thus started with default ATS protections for the named domains, you can optionally decrease or increase their protections individually. You can decrease a named domain’s protections to:

- Allow insecure HTTP connections—without diminishing ATS protections for the HTTPS connections to a domain—by employing the NSExceptionAllowsInsecureHTTPLoads key with a value of YES; doing this triggers App Store review, as described in App Store Review for ATS (https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW59)
- Disable the forward secrecy requirement by employing the NSExceptionRequiresForwardSecrecy key with a value of NO
- Lower the minimum-allowed Transport Layer Security (TLS) version by employing the NSExceptionMinimumTLSVersion key

-- 

ドメイン名の標準のATSプロテクションは、開始される
あなたは、オプショナルで、それらのプロテクションを個別に、減らすか増やすかすることができる。あなたは、次のように、ドメイン名指定のプロテクションを減らすことができる：

- あるドメインの NSExceptionAllowsInsecureHTTPLoads キーをYESにすることで、HTTPS通信のためのATSプロテクションを減らすことなく、保証のないHTTP通信を許可する。
これをすることは、AppStoreレビューで、詳細を述べる必要がある(https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW59)

- NSExceptionRequiresForwardSecrecy キーの値をNOにすることで、前方秘匿性(FS)を要求することを無効にする。

- 最小限に許可されたTransport Layer Security(TLS) バージョンは、 NSExceptionMinimumTLSVersion キーで指定する

--

You can also increase a named domain’s protections by requiring Certificate Transparency (see Certificate Transparency https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW58).

The elements of the optional NSExceptionDomains dictionary are:

-- 

あなたは、また、ドメイン名指定のプロテクションを増やすこともできる。Certificate Transparency(CT)を要求することによって。(https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW58)

この要素は、次のように、 NSExceptionDomains ディクショナリのオプショナルです：

--

- \<domain-name-string\>
A domain name string, identifying a domain for which you want to specify a connection configuration. You can add multiple instances of this key, letting you name any number of domains in the one NSExceptionDomains dictionary. Configure each \<domain-name-string\> dictionary to contain one or more of the following child keys:

    - NSIncludesSubdomains
If set to YES, applies a named domain’s ATS configuration to all of its subdomains. Default value is NO.

    - NSExceptionAllowsInsecureHTTPLoads
If set to YES, allows insecure HTTP loads for the named domain, but does not change Transport Layer Security (TLS) requirements and does not affect HTTPS loads for the named domain. Default value is NO.
Note: Use of this key triggers App Store review and requires justification.

    - NSExceptionMinimumTLSVersion
Specifies the minimum TLS version for network connections for the named domain, allowing connection using an older, less secure version of Transport Layer Security.
Note: Use of this key triggers App Store review and requires justification.

    - NSExceptionRequiresForwardSecrecy
If set to NO, allows TLS ciphers, for the named domain, that do not support forward secrecy. Default value is YES.

    - NSRequiresCertificateTransparency
If set to YES, requires valid, signed Certificate Transparency timestamps for server certificates for the named domain. Default value is NO.

Read important, detailed information on the preceding NSExceptionDomains keys in Table 3(https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW44).

-- 

- \<domain-name-string\>
ドメイン名の文字列。あなたが通信設定に指定したいドメインを特定するための。あなたは複数このキーを追加することができる。一つの NSExceptionDomains ディクショナリの中にいくつでも指定できる。
\<domain-name-string\>のディクショナリは、以下の子キーを一つ以上含む


- NSIncludesSubdomains

もし、YESをセットすると、指定したドメインの全てのサブドメインにATS設定が適用される。デフォルトはNO。

- NSExceptionAllowsInsecureHTTPLoads 

もし、YESがセットされると、指定したドメインへの保証のないHTTPロードが許可される。しかし、TLSの要求は変更できない。指定したドメインへのHTTPSロードは、影響しない。デフォルト値は、NO。

注釈：このキーをYESにセットすると、AppStoreのレビューにて、正当な理由が求められる。

- NSExceptionMinimumTLSVersion

ドメイン指定したネットワーク通信の最小限のTLSバージョンを指定する。古いバージョンの通信を許可するには、TLSのバージョンを低くする。

注釈：このキーをYESにセットすると、AppStoreのレビューにて、正当な理由が求められる。

- NSExceptionRequiresForwardSecrecy

もし、NOがセットされると、指定したドメインのTLS暗号化でFSをサポートしないことを許可する。デフォルト値は、YES。

- NSRequiresCertificateTransparency

もし、YESがセットされると、指定したドメインのサーバの証明書のCertificate Transparencyにサインされたタイムスタンプの妥当性を要求する。デフォルト値は、NO。

重要事項を読んでください。前述の NSExceptionDomains キーの詳細情報は表3(https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW44) に詳細情報があります。

--

## Using ATS in Apple Frameworks

App Transport Security (ATS) is enforced by the NSURLSession class and all APIs that use it. ATS is automatically enabled when you link your app against the iOS 9.0 SDK or later or against the OS X v10.11 SDK or later. (The older NSURLConnection class also enforces ATS when you link against the iOS 9.0 SDK or later or against the OS X v10.11 SDK or later.) ATS protections are not available when using lower-level networking APIs provided by Apple, or when using third-party networking libraries.

--

ATSは、NSURLSession class や それを使う全てのAPIにおいて、強制される。ATSは、自動で有効になる。あなたがアプリをiOS9.0以上、OSX v10.11のSDKとアプリをリンクするとき。
(古い NSURLConnection クラスもまた、ATSを強制する。あなたがアプリをiOS9.0以上、OSX v10.11のSDKとアプリをリンクするとき。)
ATSプロテクションは、Appleが提供している低レベルネットワークAPIを使うときは利用することができない。もしくは、サードパーティのネットワークライブラリを利用する時も。

--

Note: Consider risks carefully before opting to use lower-level networking APIs provided by Apple, or opting to use third-party networking libraries. Such approaches lose App Transport Security protections, putting your app and your user’s data at risk.

--

注釈：リスクを注意深く検討してください。Appleが提供する低レベルのネットワークAPIを利用する際や、サードパーティのネットワークライブラリを利用する際は。そのようなアプローチは、ATSプロテクションを失い、あなたのアプリとあなたのユーザデータにリスクを持たせることになる。


--

ATS is not available on operating systems older than iOS 9.0 or OS X v10.11; those older operating systems ignore the NSAppTransportSecurity key. When ATS is not available, the system still provides standard HTTPS security and performs server trust evaluation per RFC 2818(https://tools.ietf.org/html/rfc2818).

If you link your app against an SDK for an operating system older than iOS 9.0 or OS X v10.11, your Internet connections continue to work but ATS is disabled, no matter which version of operating system your app is running on.

--

ATSは、iOS9.0やOSXv10.11よりも古いOSでは利用することができない。これらの古いOSは、 NSAppTransportSecurity キーを無視する。ATSが利用できない時、そのシステムは、まだ提供する、一般的なHTTPSセキュリティと、RFC 2818 (https://tools.ietf.org/html/rfc2818) でのサーバの証明を。

もし、あなたのアプリが、iOS9.0やOSXv10.11よりも古いOSのSDKとリンクする時、あなたのインターネット通信は、動作し続ける。しかし、たとえ、あなたのアプリが、どのOSバージョンで動き続けていてもATSは無効化されます。

--

## Availability of ATS for Remote and Local Connections

App Transport Security (ATS) applies only to connections made to public host names. The system does not provide ATS protection to connections made to:

- Internet protocol (IP) addresses
- Unqualified host names
- Local hosts employing the .local top-level domain (TLD)
To connect to an unqualified host name or to a .local domain, you must set the value of the NSAllowsLocalNetworking key to YES.

Note: Although ATS is unenforced for connection to local hosts, Apple strongly recommends using Transport Layer Security (TLS) for any local connection, along with the use of a self-signed certificate to validate the local IP address.

--

## Availability of ATS for Remote and Local Connections

ATSは、パブリックなホスト名に通信する時だけ、適用される。
システムが、次のような通信を行う際は、ATSプロテクションは提供されない：

- IPアドレス
- Unqualified なホスト名
- TLDが、.local な ローカルホスト

unqualifiedなホスト名や、.localなドメインへの通信については、あなたは NSAllowsLocalNetworking キーを YES にしなければならない。

注釈：ATSが強制されないローカルホストへの通信であっても、AppleはTLSを利用することを強く推奨する。自己証明書を使って、ローカルIPアドレスの正当性を確認する場合も同様に。

--

## Requirements for Connecting Using ATS

With App Transport Security (ATS) fully enabled, the system requires that your app’s HTTP connections use HTTPS and that they satisfy the following security requirements:

- The X.509 digital server certificate must meet at least one of the following trust requirements:
    - Issued by a certificate authority (CA) whose root certificate is incorporated into the operating system
    - Issued by a trusted root CA and installed by the user or a system administrator
- The negotiated Transport Layer Security (TLS) version must be TLS 1.2. Attempts to connect without TLS/SSL protection, or with an older version of TLS/SSL, are denied by default.
- The connection must use either the AES-128 or AES-256 symmetric cipher. The negotiated TLS connection cipher suite must support forward secrecy (FS) through ECDSA key exchange, and must be one of the following:

--

ATSは、完全に有効化すると、システムは、あなたのアプリのHTTP通信は、HTTPSを利用することを要求し、以下のセキュリティ要求を満たす。

- X.509のデジタルサーバ証明は、少なくとも以下の信用の要求の一つが必要
    - CAによって発行されているルート証明書が、OSに含まれていること
    - 信頼されたルートCAによって発行され、システムのアドミニストレータやユーザによってインストールされていること

- TLSバージョンは、TLS1.2でなければならない。TLS/SSLプロテクションなしでの通信の試みや、TLS/SSLバージョンが古い場合は、デフォルトで拒否される。
- 通信は、AES-128 か、AES-256 のどちからの暗号でなければならない。TLS通信の暗号スイートは、FSをサポートしていなければならない。ECDSAキーエクスチェンジや、以下の一つでなければならない。

    - 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

-- 

- The leaf server certificate must be signed with one of the following types of keys:
    - Rivest-Shamir-Adleman (RSA) key with a length of at least 2048 bits
    - Elliptic-Curve Cryptography (ECC) key with a size of at least 256 bits

In addition, the leaf server certificate hashing algorithm must be Secure Hash Algorithm 2 (SHA-2) with a digest length, sometimes called a “fingerprint,” of at least 256 (that is, SHA-256 or greater).


The requirements listed in this section are current as of this document’s publication date, with stricter requirements possible in the future. Changes to these requirements will not break app binary compatibility.

--

- リーフサーバ証明は、以下のキータイプで署名されなければならない
    - RSA キー、少なくとも2048 bits
    - ECC キー、少なくとも256 bits

加えて、リーフサーバ証明のハッシュアルゴリズムは、SHA-2 でなければならない。時々fingerprintと呼ばれるdigest lengthは、少なくとも256 (SHA-256かそれ以上)

このセクションの中の要求リストは、現在の公開されているドキュメントの公開日付で、将来、厳密な要求の可能性がある。これらの要求の変更は、アプリのバイナリ互換性を壊さないだろう。

--

## Certificate Transparency


Certificate Transparency employs logging of X.509 certificates, using cryptographic assurance and in a manner that can be publicly audited. This system facilitates identifying certificates that were mistakenly or maliciously issued. App Transport Security lets you configure your app to require Certificate Transparency (CT) for specific, named domains. Before such a domain can connect with your app, it must prove to the system that its X.509 digital certificate is present in at least two CT logs trusted by Apple.

--

CT は、X.509証明のロギングを要求する。暗号解読法を使うこと、方法は、会計監査で使うことができる。
このシステムの促進は、身元の証明を確認する、間違える、故意な問題を。
ATSは、設定する、あなたのアプリにCTを要求することを。ドメイン名を指定して。そのようなドメインは、あなたのアプリと通信することができる。
それは証明しなければならない。そのシステムのX.509デジタル証明は、
Appleが信頼する、少なくとも２つのCTログに含まれていなければならない。

-- 

To require Certificate Transparency, set the value of the NSRequiresCertificateTransparency key, within the appropriate domain-name dictionary, to YES. (See the overall structure of the NSAppTransportSecurity dictionary, in ATS Configuration Basics, to see exactly where the NSRequiresCertificateTransparency key should be placed.)

--

CTを要求するため、適切なドメイン名ディクショナリの中の NSRequiresCertificateTransparency キーをセットし、YESにする。(NSAppTransportSecurity ディクショナリの全体構造を参照してください。ATS Configuration Basics https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW35
 正確な場所は、 NSRequiresCertificateTransparency キー)


--

Enabling Certificate Transparency does not eliminate the need for your app to revoke invalid certificates and to refuse connections that employ them. To support certificate checking and revocation, use Online Certificate Status Protocol (OCSP) stapling, specified in RFC6066(https://tools.ietf.org/html/rfc6066#section-8).

For details on Certificate Transparency, see certificate-transparency.org.(https://www.certificate-transparency.org/)

--

CTを有効化することは、あなたのアプリに、正常ではない証明書の無効化と、通信の遮断を必要とはしない。証明書のチェックと無効化をサポートするため、OCSP を利用する。

CTの詳細は、certificate-transparency.org を参照してください。

--

## ATS and Overriding HTTPS Server Trust Evaluation

Your ability to override HTTPS server trust evaluation depends on whether or not App Transport Security (ATS) is in enabled for a domain, as follows:

- If ATS is enabled for a domain, you cannot override the system’s HTTPS server trust evaluation.
- If ATS is not enabled for a domain, the system nonetheless performs HTTPS server trust evaluation, but you can override this as described in HTTPS Server Trust Evaluation.(https://developer.apple.com/library/prerelease/content/technotes/tn2232/_index.html#//apple_ref/doc/uid/DTS40012884)

--

HTTPSサーバ信用評価を上書きするためのあなたの能力は、ATSには依存しない。あるドメインのために有効にする、以下のように：

- もし、ATSがあるドメインで有効な場合、あなたはシステムのHTTPSサーバ信用評価を上書きすることはできない
- もし、ATSがあるドメインで有効ではない場合でもかかわらず、システムは、HTTPSサーバ信用評価を行う。しかし、あなたがHTTPSサーバ信用評価の中で述べられたようにこれを上書きすることができる。
(https://developer.apple.com/library/prerelease/content/technotes/tn2232/_index.html#//apple_ref/doc/uid/DTS40012884)

--

## App Store Review for ATS
Your use of certain App Transport Security (ATS) keys triggers additional App Store review for your app, and requires you to provide justification. These keys are:

NSAllowsArbitraryLoads
NSExceptionAllowsInsecureHTTPLoads
NSExceptionMinimumTLSVersion
Some examples of justifications eligible for consideration are:

- Must connect to a server managed by another entity that does not support secure connections
- Must support connecting to devices that cannot be upgraded to use secure connections, and that must be accessed via public host names
- Must provide embedded web content from a variety of sources, but cannot use a class supported by the NSAllowsArbitraryLoadsInWebContent key

When submitting your app to the App Store, provide sufficient information for the App Store to determine why your app cannot make secure connections by default.

--

あなたのあるATSキーの利用は、追加のAppStoreReviewを引き起こし、あなたが正当性を提供することを要求します。これらのキーについて：

- NSAllowsArbitraryLoads
- NSExceptionAllowsInsecureHTTPLoads
- NSExceptionMinimumTLSVersion

いくつかの考慮すべき適切な正当性の例は、次の通り：
- セキュアな通信をサポートしていない、他で管理されているサーバに、通信しなければならない
- セキュアな通信を使うためにアップグレードすることができないデバイスに接続しなければならない。そして、パブリックなホスト名経由で通信しなければならない
- 様々なソースの組み込まれたWebコンテンツを提供しなければならない。しかし、 NSAllowsArbitraryLoadsInWebContent キーをサポートしているクラスを使うことができない

AppStoreへあなたのアプリを提出する時、なぜあなたのアプリがデフォルトのセキュアな通信を使うことができないのかを特定するための十分な情報を提供してください。

--

##ATS Dictionary Details

Table 2 shows the primary keys within the NSAppTransportSecurity dictionary for describing your app’s intended network behavior. For the sub-keys associated with the NSExceptionDomains dictionary, see Table 3.(https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW44)

-- 

###表2

表2は、NSAppTransportSecurity ディクショナリのプライマリーキーを示している。あなたのアプリの意図されたネットワークの振る舞いを述べるための。
NSExceptionDomains ディクショナリのサブキーについては、表3を参照してください。

--

Table 2  App Transport Security dictionary primary keys

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSAllowsArbitraryLoads |“Allow Arbitrary Loads”  | Boolean  |   |


An optional Boolean value that, when set to YES, disables App Transport Security (ATS) for all domains for which you do not explicitly reenable ATS by using an exception domain dictionary (as specified using the NSExceptionDomains key).
Use of this key triggers App Store review and requires justification.
Enable this key for cases where your app allows the user to specify connection to an arbitrary URL.
Enabling this key can also be useful for debugging and development.
In iOS 10 and later, and macOS 10.12 and later, the value of this key is ignored if any of the following keys are present in your app’s Info.plist file:
- NSAllowsArbitraryLoadsForMediaContent
- NSAllowsArbitraryLoadsInWebContent
- NSAllowsLocalNetworking
NOTE Disabling ATS allows connection regardless of HTTP or HTTPS configuration, allows connection to servers with lower Transport Layer Security (TLS) versions, and allows connection using cipher suites that do not support forward secrecy (FS).
This key’s default value of NO results in default ATS behavior for all connections except those for which you have specified an exception domain dictionary (see Table 3).

--

オプショナルなBoolean値、YESがセットされた時、全てのドメインに対してATSを無効化する。例外ドメインディクショナリを利用することによって、あなたが明確にATSを再度有効化しない(NSExceptionDomains キーを使って指定するような)
このキーの利用は、AppStoreレビューで、正当な理由の要求を引き起こす。
このキーを有効にするケースは、あなたのアプリは、ユーザに任意のURLへの通信の指定を許可するような場合である。
このキーを有効にすることは、またデバッグと開発にとって有益である。
iOS10以降と、macOS10.12以降は、このキーの値は、もし、以下のキーをあなたのアプリのInfo.plistに記載していると無視される：

- NSAllowsArbitraryLoadsForMediaContent
- NSAllowsArbitraryLoadsInWebContent
- NSAllowsLocalNetworking

注釈：ATSを無効化することは、HTTPやHTTPS設定に関わらず通信を許可する。サーバのTLSバージョンが低くても許可する。FSをサポートしていない暗号スイートでも許可する。
このキーのデフォルト値は、NO。ドメインディクショナリの例外設定を除く、全ての通信に対して、ATSのデフォルトとして振る舞う。
（表3を参照）

--

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSAllowsArbitraryLoadsInMedia |(none)  | Boolean  |   |

An optional Boolean value that, when set to YES, disables all App Transport Security restrictions for media loaded using APIs from the AV Foundation framework, as described in AV Foundation Framework Reference.
Employ this key only for loading media that are already encrypted, such as files protected by FairPlay or by secure HLS, and that do not contain personalized information.
If you add this key to your Info.plist file, then, irrespective of the value of the key, ATS ignores the value of the NSAllowsArbitraryLoads key.
Default value is NO.
Available starting in iOS 10.0 and macOS 10.12.

--

オプショナルなBoolean値。YESにセットすると、全てのATSのAVFoundationフレームワークのAPIを利用したmediaロードの制約を無効化する。
このキーは、FairPlayやsecure HLSによってファイル保護されているような、既に暗号化されているmediaのロードで、かつ、個人情報を含まない時に使ってください。
もし、あなたがこのキーをInfo.plistファイルに追加すると、このキーの値に関わらず、NSAllowsArbitraryLoads キーの値は無視される。デフォルト値は、NO。
iOS10.0とmacOS10.12から利用可能。

--

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSAllowsArbitraryLoadsInWebContent |(none)  | Boolean  |   |


An optional Boolean value that applies only to content to be loaded into an instance of the following classes:
- WKWebView
- UIWebView (iOS only)
- WebView (macOS only)
Set this key’s value to YES to obtain exemption from ATS policies in your app’s web views, without affecting the ATS-mandated security of your NSURLSession connections.
Default value is NO.
To support older versions of iOS and OS X, you can employ this key and still manually configure ATS. To do so, set this key’s value to YES and also configure the NSAllowsArbitraryLoads subkeys.
If you add this key to your Info.plist file, then, irrespective of the value of the key, ATS ignores the value of the NSAllowsArbitraryLoads key.
Available starting in iOS 10.0 and macOS 10.12.

--

オプショナルなBoolean値で、以下のクラスのインスタンスの中でロードされたコンテンツにのみ適用される：

- WKWebView
- UIWebView (iOS only)
- WebView (macOS only)

このキーをYESにすると、あなたのアプリのwebViewは、ATSのポリシーから免除される。NSURLSessionの通信において、ATSで管理されているセキュリティに影響を与えずに。
デフォルト値は、NO。
古いバージョンのiOSとOSXをサポートするには、あなたは、このキーを使い、さらに手作業でATS設定を行う。このキーの値をYESにし、さらに、NSAllowsArbitraryLoads のサブキーを設定する。
もし、あなたがこのキーをInfo.plistファイルに追加すると、このキーの値に関わらず、NSAllowsArbitraryLoads キーの値は無視される。デフォルト値は、NO。
iOS10.0とmacOS10.12から利用可能。

--

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSAllowsLocalNetworking |(none)  | Boolean  |   |

An optional Boolean value that, when set to YES, removes App Transport Security protections for connections to unqualified domains and to .local domains, without disabling ATS for the rest of your app.
If you set this key’s value to YES, then App Transport Security ignores the value of the NSAllowsArbitraryLoads key in iOS 10 and later and in macOS 10.12 and later. This behavior supports adoption of App Transport Security protections while allowing embedded browsers to continue working in iOS 9 and earlier and in OS X v10.11 and earlier. (To obtain this behavior, set the value of this key to YES and set the value of the NSAllowsArbitraryLoads key to YES as well.)
Default value is NO.
Available starting in iOS 10.0 and macOS 10.12.

--

オプショナルなBoolean値で、YESをセットすると、unqualifiedなドメインや.localドメインへの通信のATSプロテクションを削除する。
あなたのアプリの他のATS設定を無効化することなく。

もし、あなたがYESをセットすると、iOS10以上、macOS 10.12以上で、NSAllowsArbitraryLoadsキー は無視される。
この振る舞いは、ATSプロテクションの選択をサポートする。組み込まれたブラウザでiOS9以下やOSXv10.11以下でも動作し続けることを許可する（この振る舞いを得るために、このキーはYESにセットし、NSAllowsArbitraryLoads キーもYESにする）
デフォルト値はNO。
iOS10.0とmacOS10.12から利用可能。

--

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSExceptionDomains |“Exception Domains” | Dictionary  |   |

An optional dictionary of ATS exceptions for specific domains. Each value in the dictionary is itself a dictionary, and describes a domain-specific network connection configuration exception.
An exception domain’s top-level key is the domain name string for which you want to specify a connection configuration; for example, www.apple.com. A domain name key for an exception dictionary:
- Must be lowercased to work correctly
- Must not include a port number
- Must not be a numerical IP address (but rather a string)
- Must not end with a trailing dot, unless you only want to match a domain string with a trailing dot. For example, example.com. (with a trailing dot) matches “example.com.” but not “example.com”. Similarly, example.com matches “example.com” but not “example.com.”.
For details on configuring an exception domain dictionary, see Table 3.

--

ドメインのATS例外設定のためのオプショナルなディクショナリ。それぞれの値自体は、ディクショナリで、指定したドメインのネットワーク通信設定の例外を定義する。
例外のドメインのトップレベルキーは、あなたが設定したいドメイン名を指定する。例えば、www.apple.comなど。
ドメイン名のキーの例外ディクショナリは：
- 正しく動作するために、lowercaseでなければいけない
- ポート番号を含めてはいけない
- 数値のIPアドレスではいけない（しかし、むしろ文字列）
- 末尾は、ドット(.)ではいけない。あなたは、末尾がドットのドメイン文字列にマッチさせたい以外では、例えば、example.com.（末尾ドットあり）にマッチするのは"example.com."。しかし、"example.com"ではない。同様に、example.comは、"example.com"にマッチする。しかし、"example.com."ではない。
ドメイン例外設定の詳細は、表3を参照。

--

Table 3 shows the keys for describing server-specific exceptions to your app’s overall intended network behavior.

Table 3  Exception domains dictionary keys

--

###表3	

表3は、アプリ全体のネットワークの振る舞いを、サーバ指定の例外設定するためのキーを示す。

-- 

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSIncludesSubdomains |(none) | Boolean  |   |

An optional Boolean value that, when set to YES, applies the NSExceptionDomains ATS exceptions to all subdomains (of the domain whose name is the top-level key in the NSExceptionDomains dictionary).
Default value is NO.

--

オプショナルなBoolean値で、YESをセットすると、NSExceptionDomains ATS例外を適用する、全てのサブドメインに。
(NSExceptionDomainsディクショナリのトップレベルキーは、ドメインの名前)
デフォルト値は、NO。

--

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSRequiresCertificateTransparency |(none) | Boolean  |   |

An optional Boolean value that, when set to YES, requires that valid, signed Certificate Transparency (CT) timestamps, from known CT logs, be presented for server (X.509) certificates on a domain.
Default value is NO.
Available starting in iOS 10.0 and macOS 10.12.

--

オプショナルなBoolean値で、YESをセットすると、CTに署名されたタイムスタンプの正当性を求められる。
知られているCTログから、そのドメインのサーバ(X.509)の証明書に含まれる。
デフォルト値は、NO。
iOS10.0とmacOS10.12から利用可能。

--

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSExceptionAllowsInsecureHTTPLoads |(none) | Boolean  |   |

An optional Boolean value that, when set to YES, allows insecure HTTP loads but does not change Transport Layer Security (TLS) requirements. Use this key to describe your app’s intended connection behavior for a domain whose security attributes you have control over.
Use of this key triggers App Store review and requires justification.
With this key’s value set to YES, your app can make secure connections to a secure server but can also connect insecurely to a server with no certificate, or a self-signed, expired, or host-name-mismatched certificate.
Set this key’s value to YES, if needed, to:
- Enable connection to an insecure HTTP server
- Enable connection to an untrusted HTTPS server
- Enable connection to an HTTPS server for which you want to perform your own server trust evaluation

In some cases you need to use other exception-dictionary keys along with this one to establish connection. For example, to connect to an HTTPS server that uses a self-signed certificate and a TLS version lower than 1.2, set the NSExceptionAllowsInsecureHTTPLoads value to YES and also set an appropriate value for the NSExceptionMinimumTLSVersion key.
Default value is NO.

--

オプショナルなBoolean値で、YESをセットすると、保証のないHTTPロードを許可する。しかし、TLSの要求は変更できない。このキーを使って、あなたのアプリのあるドメインへの通信の振る舞いをコントロールする。
このキーを利用することは、AppStoreレビューで正当な理由を求められることになる。
このキーの値をYESにし、もし必要であれば：
- 保証のないHTTPサーバへの通信を有効にする
- 信頼されていないHTTPSサーバへの通信を有効にする
- あなた自身が証明しているサーバへのHTTPSサーバへの通信を有効にする。

幾つかのケースで、あなたが他の例外ディクショナリキーを、使う必要がある、通信
例えば、自己署名証明書を使い、TLSバージョンを1.2以下のHTTPSサーバに通信するために、NSExceptionAllowsInsecureHTTPLoads の値にYESをセットし、また、NSExceptionMinimumTLSVersionキーに適切な値をセットする。
デフォルト値は、NO。

--

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSExceptionRequiresForwardSecrecy |(none) | Boolean  |   |

An optional Boolean value for overriding the requirement that a server support forward secrecy (FS). Use this key to describe your app’s intended connection behavior for a domain whose security attributes you have control over.
Default value is YES, which limits the accepted ciphers to those listed in ATS Configuration Basics.
Setting the value to NO results in the following ciphers, which do not support FS, also being accepted:

- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA

--

オプショナルなBoolean値、FSのサポートのサーバの要求を上書きするための値。
このキーを使用する通信のドメインのセキュリティの振る舞いをコントロールする
デフォルト値は、YES。適用される暗号化は制限される。
NOを設定すると、以下の暗号化のみになる。FSはサポートしない。また、適用される。

- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA

--

|Key  |Xcode name  |Type  |Description |
|---|---|---|---|
|NSExceptionMinimumTLSVersion |(none) | String  |   |

An optional string value that specifies the minimum Transport Layer Security (TLS) version for network connections. Use this key to describe your app’s intended connection behavior for a domain whose security attributes you have control over.
Use of this key triggers App Store review and requires justification.
Valid values are:
- TLSv1.0
- TLSv1.1
- TLSv1.2
Default value is TLSv1.2.

--

オプショナルな文字列値で、最低のTLSバージョンをを指定する。
このキーを使うと、あるドメインに対してのあなたのアプリの対象の通信の振る舞いを定義する。
このキーを使うことは、AppStoreレビューで正当性を求められる。
適切な値は；
- TLSv1.0
- TLSv1.1
- TLSv1.2
デフォルト値は、TLSv1.2。

--

###ATS Examples
一旦割愛します

--

###Debugging ATS Connections
一旦割愛します

--

###Using the nscurl Tool to Diagnose ATS Connection Issues

こんな便利ツールがある。

/usr/bin/nscurl --ats-diagnostics --verbose https://apple.com

TLSToolというサンプルコードプロジェクトもあるようです。詳細未確認です。

https://developer.apple.com/library/prerelease/content/samplecode/sc1236/Introduction/Intro.html#//apple_ref/doc/uid/DTS40014927


--

#注釈


~~[^1]: iOS10の記載があるプレリリースドキュメントです。iOS9版のドキュメントはこちら https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html~~