web-dev-qa-db-ja.com

Xcode 9.2でアプリトランスポートセキュリティを無効にしますか?

Xcode9.2でAppTransport Security(ATS)を無効にできません。私は(何年もの間)次のようにローカルサーバー環境に対してビルドを実行するときにATSを無効にしてきました:

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

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

Xcode 9.2では、単純なリクエスト(ローカルRails httpモードのアプリに対して実行):

let session = URLSession(configuration: .default)
let url = URL(string: "http://store.dev/api/products.json")!

let task = session.dataTask(with: url) { data, response, error in
    print(data)
    print(response)
    print(error)
}

task.resume()

エラーメッセージで失敗する

エラードメイン= NSURLErrorDomainコード= -1200「SSLエラーが発生し、サーバーへの安全な接続を確立できません。」 UserInfo = {_ kCFStreamErrorCodeKey = -9802、NSLocalizedRecoverySuggestion =とにかくサーバーに接続しますか?、NSUnderlyingError = 0x60c00024afb0 {Error Domain = kCFErrorDomainCFNetwork Code = -1200 "(null)" UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0、_kCFNetworkCFStream _kCFStreamErrorDomainKey = 3、_kCFStreamErrorCodeKey = -9802}}、NSLocalizedDescription = SSLエラーが発生し、サーバーへの安全な接続を確立できません。、NSErrorFailingURLKey = https://store.dev/api/products.json 、NSErrorFailingURLStringKey = https://store.dev/api/products.json 、_ kCFStreamErrorDomainKey = 3}

このまったく同じリクエスト(同じプロジェクトも)はXcode9.1で成功します。

どちらの場合も、私はiOS11.1のデプロイメントターゲットに対してビルドしています。 XcodeがURLをhttpからhttpsに変更していることがわかりますが、これは望ましくありません。

これは、Xcode 9.1で機能するが、9.2では失敗する超基本プロジェクトへのリンクです( https://github.com/chrismanderson/ats-sample )。

また、ローカルのstore.devドメインに対してのみATSを無効にしてみましたが、Xcode 9.1では機能しますが、9.2では機能しません。

10
chrismanderson

私はもともとそれをまとめていませんでしたが、iOS 11ではAppleがサポートしています [〜#〜] hsts [〜#〜] =。最近Googleと組み合わせたHSTSプリロードリストのサポート HSTSプリロードリストに.dev TLDを追加 は、iOSがhttpsの使用を強制しようとする可能性がありますが、失敗しています(テストに.devローカルドメインを使用しようとしているのを見逃しました。これは本当にここで重要な要素です)。

唯一の解決策は、ローカルテストドメインを.devドメイン以外のものに変更することだと思います。そうすれば、接続できるはずであり、ローカルの開発環境でhttpsを強制的に実行しようとはしません。

つまり、Googleは.devトップレベルドメインへの権限を取得し、最近HSTSプリロードリストに追加して、.devドメインとのすべての通信を安全にしています。 HSTSプリロードリストをサポートするデバイスでは、これによりすべてのトラフィックがHTTPS経由でリダイレクトされ、HTTPSをサポートしないサーバーでエラーが発生します。

8
wottle

XCodeの画面の左側にあるナビゲーターで、すべてのファイルとフォルダーが保存されているメインプロジェクトファイルをクリックします。 [情報]タブをクリックします。 [カスタムiOSターゲットプロパティ]の下に、アプリトランスポートセキュリティ設定(ATS)を変更するオプションが表示されていました。明示的には記載されていませんが、引き続き利用できます。

オプションの上にマウスを置くと、小さな円の中に+が表示されます。クリックして。 XCodeは、「アプリケーションカテゴリ」を作成するように要求します。表示されるリストで、上にスクロールして[アプリトランスポートのセキュリティ設定]を選択します。

そのオプションをクリックします。それが作成されると、BOOL値を変更するように求められます(デフォルトは「NO」である必要があります)。右端に、上下の矢印のセットが表示されます。これをクリックして、BOOLをyesに変更します。

0
Hugo Budd