簡體   English   中英

在Xcode 9.2中禁用App Transport Security?

[英]Disable App Transport Security in Xcode 9.2?

我無法在Xcode 9.2中禁用App Transport Security(ATS)。 我(多年來)在針對我的本地服務器環境運行構建時禁用ATS,如下所示:

傳輸安全性阻止了明文HTTP

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

在Xcode 9.2中,一個簡單的請求(在http模式下針對本地Rails應用程序運行):

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 {錯誤域= kCFErrorDomainCFNetwork代碼= -1200“(null)”UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0,_kCFNetworkCFStreamSSLErrorOriginalValue = -9802, _kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9802}},NSLocalizedDescription =發生了SSL錯誤,無法建立與服務器的安全連接。,NSErrorFailingURLKey = https://store.dev/api/products.json,NSErrorFailingURLStringKey = https: //store.dev/api/products.json ,_kCFStreamErrorDomainKey = 3}

這個完全相同的請求(同樣的項目)在Xcode 9.1上取得了成功。

在這兩種情況下,我都是針對iOS 11.1部署目標而構建的。 您可以看到Xcode正在將URL從http更改為https,這是我不想要的。

以下是在Xcode 9.1中工作的超級基礎項目的鏈接,但在9.2( https://github.com/chrismanderson/ats-sample )中失敗。

我也嘗試僅為本地store.dev域禁用ATS,同樣,它適用於Xcode 9.1但不適用於9.2。

我最初並沒有將它整合在一起,但我認為正在發生的事情是,在iOS 11中,Apple正在支持HSTS 我相信支持HSTS預加載列表,結合Google最近將.dev TLD添加到HSTS預加載列表 ,可能會導致iOS嘗試強制您使用https,這是失敗的(我錯過了您嘗試使用用於測試的.dev本地域,這實際上是關鍵元素)。

我認為您唯一的解決方案是將本地測試域更改為.dev域以外的域。 如果您這樣做,您應該能夠連接,並且它不會嘗試強制您在本地開發環境中進行https。

簡而言之,Google已獲得.dev頂級域名的權利,並且最近將其添加到HSTS預加載列表中,以強制與.dev域的所有通信都是安全的。 在支持HSTS預加載列表的設備上,這會導致所有流量通過HTTPS重定向,這將導致不支持HTTPS的服務器出錯。

在XCode屏幕左側的導航器上,單擊主項目文件,其中存儲了所有文件和文件夾。 單擊“信息”選項卡。 在“自定義iOS目標屬性”下,您曾經看到一個用於更改應用程序傳輸安全設置(ATS)的選項。 它沒有明確說明,但仍然可用。

當您將鼠標懸停在選項上時,您應該在小圓圈中看到+ 點擊它。 XCode將提示您創建“應用程序類別”。 在出現的列表中,向上滾動並選擇“App Transport Security Settings”。

單擊該選項。 一旦創建它,​​它應該提示您更改BOOL值(默認值應為“NO”)。 在最右邊,你應該看到一組向上和向下箭頭。 單擊此按鈕將BOOL更改為yes。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM