iOS 10、macOS 10.12 の App Transport Security (ATS) について

iOS 10 の App Transport Security (ATS) について完全にドハマリしたので、[Apple の Information Property List Key Reference の App Transport Security 部分](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33)の各キーについてを日本語意訳します。

[ドハマリした話はこちらからどうぞ。](http://press.treastrain.jp/ios-10-app-transport-security/)

#`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`.

>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:

>- `NSAllowsArbitraryLoadsForMedia`
>- `NSAllowsArbitraryLoadsInWebContent`
>- `NSAllowsLocalNetworking`

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

`YES` に設定すると、`NSExceptionDomains` ディクショナリで個別に設定するドメインへの接続を除き、全てのネットワーク接続に対して全ての ATS 制限が無効になります。デフォルトは `NO` です。

iOS 10 以降、および macOS 10.12 以降では、App の Info.plist ファイルに次のキーがある場合、このキーの値は無視されます。

- `NSAllowsArbitraryLoadsForMedia`
- `NSAllowsArbitraryLoadsInWebContent`
- `NSAllowsLocalNetworking`

**注:** このキーの値を `YES` に設定すると、App Store のレビュー時に正当な理由が求められます。

#`NSAllowsArbitraryLoadsForMedia`
>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`.

>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.

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

`YES` に設定すると、AV Foundation framework を使用して App が読み込むメディアの全ての ATS 制限が無効になります。このキーは、FairPlay やセキュア HLS によって保護されている、情報を含まないファイルなど、既に暗号化されているメディアをロードする場合に使用されます。デフォルトは `NO` です。

Info.plist ファイルにこのキーを追加すると、キーの値にかかわらず、ATS は `NSAllowsArbitraryLoads` キーの値を無視します。

iOS 10.0 と macOS 10.12 から利用可能です。

**注:** このキーの値を `YES` に設定すると、App Store のレビュー時に正当な理由が求められます。

#`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`.

>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.

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

`YES` に設定すると、Web View からの要求に対する全ての ATS 制限が無効になります。これによって、App で ATS を無効にすること無く任意のコンテンツを表示できる埋め込みブラウザを使用できます。デフォルトは `NO` です。

Info.plist ファイルにこのキーを追加すると、キーの値にかかわらず、ATS は `NSAllowsArbitraryLoads` キーの値を無視します。

iOS 10.0 と macOS 10.12 から利用可能です。

**注:** このキーの値を `YES` に設定すると、App Store のレビュー時に正当な理由が求められます。

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

`YES` に設定すると、残りの App で 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.

オプションでこの辞書に1つまたは複数の名前付きドメインのための ATS 設定を行います。

このキーを `NSAppTransportSecurity` ディクショナリに追加すると、`NSAllowsArbitraryLoads` キーに設定された値にかかわらず、ディクショナリ内で設定したドメインがデフォルトである完全な ATS 制限を受けます。ドメイン名のキーのサブキーでは、そのドメインの ATS 制限をデフォルトから変更できます。

##`<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:

接続設定を指定するドメインを識別するドメイン名の文字列です。このキーのインスタンスを複数追加して、1つの `NSExceptionDomains ` ディクショナリに任意の数のドメイン名を付けることができます。それぞれの `<domain-name-string>` ディクショナリに、次の1つまたは複数の子キーを含めるように設定します。

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

`YES` に設定されている場合は、指定されたドメインの ATS 設定をすべてのサブドメインに適用します。デフォルト値は `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:** Setting this key’s value to `YES` triggers App Store review and requires justification.

`YES` に設定されていると、指定されたドメインに対して安全でない HTTP 通信を許可しますが、TLS (Transport Layer Security) 要件は変更されず、指定ドメインの HTTPS 通信には影響しません。デフォルト値は `NO` です。

**注:** このキーの値を `YES` に設定すると、App Store のレビュー時に正当な理由が求められます。

###`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.

指定されたドメインのネットワーク接続の最小 TLS バージョンを指定します。これにより、より安全ではない旧バージョンの Transport Layer Security を使用した接続が可能になります。

**注:** このキーの値を設定すると、App Store のレビュー時に正当な理由が求められます。


###`NSExceptionRequiresForwardSecrecy`
>If set to `NO`, allows TLS ciphers, for the named domain, that do not support perfect forward secrecy (PFS). Default value is `YES`.

`NO` に設定されている場合は、指定されたドメインに対して Perfect Forward Secrecy (PFS) をサポートしない TLS を許可します。デフォルト値は `YES` です。

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

`YES` に設定されている場合は、指定されたドメインのサーバー証明書に有効な署名付き証明書透過タイムスタンプが必要です。デフォルト値は `NO` です。