2016-12-09 179 views
1

使用WKWebView,連接到用戶選擇時將重定向到另一個站點的站點。 didReceiveServerRedirectForProvisionNavigation後出現以下錯誤:kCFErrorDomainCFNetwork代碼= 310「(null)」

Error Domain=kCFErrorDomainCFNetwork Code=310 "(null)" UserInfo={_WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x60800002a8e0>, _kCFStreamErrorCodeKey=-2096, _kCFStreamErrorDomainKey=4} 

這裏沒有什麼特別的事情發生。我只是想模仿Safari瀏覽器。

我也覆蓋didReceive challenge下列要求:

func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) ->  Void) { 
    var cred: URLCredential? 
    if let trust = challenge.protectionSpace.serverTrust { 
     cred = URLCredential(trust: trust) 
    } else { 
     //creds are hardcoded just to try to get the thing working. 
     cred = URLCredential(user: "hardcodedusername", password: "hardcodedpassword", persistence: .permanent) 
    } 
    completionHandler(.useCredential, cred) 
} 

值得一提的是,重定向時didReceive challenge不叫。

我的假設是,我試圖重定向到的網站有一箇舊的加密協議(TLS 1.0),iOS不允許重定向。該網站在iPhone上的Safari上正常運行。我也有ATS任意負載設置。這是Objective-C到Swift的轉換,Objective-C版本沒有這個問題(使用UIWebView,這是我在嘗試WKWebView之前的原始實現...同樣的錯誤)。

要清楚,這是一個質量保證環境。我不在乎證書是好還是壞。如果我可以避免這種環境的任何安全需求,那將是很棒的,但似乎任意加載設置對我來說都沒有任何幫助。

我錯過了什麼?

+0

任意加載會讓你http,沒有損壞或舊的HTTPS。看看這個答案中的代碼,看看你是否可以通過NSURLConnection訪問該站點:https://stackoverflow.com/questions/14268230/has-anybody-found-a-way-to-load-https-pages-with -an-invalid-server-certificate-u –

+0

感謝您的評論,但它似乎並不奏效。我試過使用NSURLConnection和URLSession(與適當的代表)。事情是...挑戰方法從未被擊中。最後我會遇到同樣的錯誤。 –

+0

嘗試使用openssl進行連接,例如'openssl s_client -connect host:443' - 如果連接,您可以鍵入HTTP請求,如「GET/HTTP/1.0」 - 否則應該給出錯誤。您也可以嘗試控制openssl使用的版本(請參見手冊頁) –

回答

3

當前的解決方案是關閉TLS 1.0。如果有人提出更好的答案,請更新。聽起來像蘋果沒有內置的方式來解決這個問題。

相關問題