1. ホーム
  2. アイオス

[解決済み】iOS 9でApp Transport Securityを有効にしてHTTP URLを読み込むにはどうすればいいですか?重複

2022-03-24 22:43:59

質問

昨晩リリースされたiOSの新しいベータ版SDKには、httpの代わりにhttpsを使用するよう開発者に促す「App Transport Security"」が搭載されていますね。原則的に、これは素晴らしいアイデアで、私はすでにステージング/プロダクション環境でhttpsを使用しています。しかし、私のローカル開発環境では、iOS アプリが私のラップトップで実行しているウェブサービスに接続する際に https を設定していません。

今朝、少し遊んでみたところ、URLロードシステムが、httpのURLを渡しても、代わりにhttpsを使うように判断するようです。この挙動を無効にする方法をご存知の方はいらっしゃいますか?

解決方法は?

アップルの Info.plistのリファレンス をご覧ください (@gnasher729 さんありがとうございます)。

Info.plistで特定のドメインに対する例外を追加することができます。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>

各除外ドメインのキーはすべてオプションです。講演者はどのキーについても詳しく説明しませんでしたが、どれもそれなりにわかりやすいと思います。

(出典 WWDC 2015 セッション703 "プライバシーとあなたのアプリ" , 30:18)

また、アプリに正当な理由がある場合は、1つのキーですべてのアプリトランスポートセキュリティの制限を無視することができます。

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

アプリに正当な理由がない場合、リジェクトされる危険性があります。

NSAllowsArbitraryLoadsをtrueに設定すれば動作しますが、Appleは、特別な理由なくこのフラグを使用するアプリを拒否するつもりであることを非常に明確に述べています。NSAllowsArbitraryLoadsを使用する主な理由として考えられるのは、ユーザーが作成したコンテンツ(リンクの共有、カスタムWebブラウザなど)でしょう。そしてこの場合にも、Appleは、あなたが管理しているURLに対してATSを強制する例外を含めることを期待しています。

TLS 1.2で提供されない特定のURLにアクセスする必要がある場合、NSAllowsArbitraryLoadsをyesに設定するのではなく、それらのドメインに対して特定の例外を記述する必要があります。NSURLSesssionのWWDCセッションでより詳細な情報を得ることができます。

NSAllowsArbitraryLoadsの解決策を共有する際には、ご注意ください。これはAppleが推奨する修正方法ではありません。

- カーチャン (@marco-tolmanさんありがとうございます)