允许使用WKWebView自签名证书

Ric*_*rdo 2 ssl ios swift wkwebview

我有以下代码,但我不知道为什么我的Web视图没有加载。

override func viewDidLoad() {
    super.viewDidLoad()
    loadWebview(env_url:"https://myurl.com")
}

func loadWebview(env_url : String){

    let config = WKWebViewConfiguration()
    let controller = WKUserContentController()
    config.userContentController = controller
    //only https is allowed
    let url = URL(string: env_url)
    if let optional_url = url {
        let url_request = URLRequest(url: optional_url)
        webview = WKWebView(frame: self.view.frame, configuration: config)
        webview?.load(url_request)
        webview?.allowsBackForwardNavigationGestures = true
        webview?.navigationDelegate = self
        webview?.uiDelegate = self
        view.addSubview(webview!)

    }
    else{
        showAlertDebug(message: "Invalid URL")
    }
}

extension WebViewController : WKNavigationDelegate {
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping ((WKNavigationActionPolicy) -> Void)) {

    decisionHandler(.allow)
}

func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
    let cred = URLCredential(trust: challenge.protectionSpace.serverTrust!)
    completionHandler(.useCredential, cred)
}
}

extension WebViewController : WKUIDelegate {

}
Run Code Online (Sandbox Code Playgroud)

Rob*_*ier 5

您必须在Info.plist中提供ATS(应用程序传输安全性)例外,以覆盖证书验证逻辑。当您接受证书时,ATS系统仍会拒绝它。有关详细信息,请参见NSAppTransportSecurity信息属性列表密钥参考 ”。通常,您希望NSAllowsArbitraryLoadsInWebContent使用您的特定域。

记住:

ATS的App Store评论

您对某些应用程序传输安全性(ATS)密钥的使用会触发对应用程序的其他App Store审查,并要求您提供理由。这些键是:

  • NSAllows任意负载
  • NSAllowsArbitraryLoadsForMedia
  • NSAllowsArbitraryLoadsInWebContent
  • NSExceptionAllowsInsecureHTTPLoads
  • NSExceptionMinimumTLSVersion

可以考虑的一些理由示例如下:

  • 必须连接到由不支持安全连接的另一个实体管理的服务器
  • 必须支持连接到无法升级为使用安全连接且必须通过公共主机名访问的设备
  • 必须提供来自各种来源的嵌入式Web内容,但不能使用NSAllowsArbitraryLoadsInWebContent键支持的类
  • 应用程序加载已加密且不包含个性化信息的媒体内容

将您的应用提交到App Store时,请提供足够的信息供App Store确定默认情况下为什么您的应用无法建立安全连接。

通常,获得商业证书比管理用于管理自己的根证书的例外(这是“自签名”证书的真正含义)要容易得多。