Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 允许使用WKWebView自签名证书_Ios_Swift_Ssl_Wkwebview - Fatal编程技术网

Ios 允许使用WKWebView自签名证书

Ios 允许使用WKWebView自签名证书,ios,swift,ssl,wkwebview,Ios,Swift,Ssl,Wkwebview,我有以下代码,但我不知道为什么我的webview没有加载 override func viewDidLoad() { super.viewDidLoad() loadWebview(env_url:"https://myurl.com") } func loadWebview(env_url : String){ let config = WKWebViewConfiguration() let controller = WKUserContentContro

我有以下代码,但我不知道为什么我的webview没有加载

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 {

}
为了覆盖证书验证逻辑,您必须在Info.plist中提供ATS(应用程序传输安全)异常。当您接受证书时,ATS系统仍然拒绝该证书。有关详细信息,请参阅中的
NSAppTransportSecurity
。通常情况下,您希望针对您的特定域使用
NSAllowsArbitraryLoadsInWebContent

请记住:

ATS应用商店审查

您使用某些应用程序传输安全(ATS)密钥会触发对应用程序的附加应用程序商店审查,并要求您提供理由。这些关键是:

  • NSAllowsArbitraryLoads
  • NSAllowsArbilarLoadsFormedia
  • NSAllowsArbilarLoadsInWebContent
  • N异常低安全Http负载
  • NSExceptionMinimumTLSVersion
可供考虑的理由包括:

  • 必须连接到由另一个不支持安全连接的实体管理的服务器
  • 必须支持连接到无法升级为使用安全连接且必须通过公用主机名访问的设备
  • 必须提供来自各种来源的嵌入式web内容,但不能使用NSAllowsArbitraryLoadsInWebContent密钥支持的类
  • 应用程序加载经过加密且不包含个性化信息的媒体内容
将应用提交到应用商店时,请向应用商店提供足够的信息,以确定默认情况下应用无法建立安全连接的原因

一般来说,获取商业证书要比管理您自己的根证书(这就是“自签名”证书的真正含义)的异常更容易