适配HTTPS遇到的坑

项目中WKWebvie加载https连接加载网页,所以要适配https,web

事先声明呀,这里会有两种状况:服务器

一种大厂的ssl证书,好比苹果,百度等等,觉得是大厂,因此加载apple,默认就是信任的,为啥,哈哈,由于,规矩都是被大厂规定的。网络

第二中,就是人们所所的私人证书,这里,咱们就要写代码选择信任咱们要访问的网络的证书了,不然,就访问不了。app

看这里

咱们看到,这是一个可选的代理方法,所以要遵照代理方法,navigationDelegate = self代理

一看,尽是英文,一头雾水,而后费劲心思,琢磨了一番,code

描述:当webview须要响应身份验证的挑战,会调用此方法orm

challenge:身份验证的挑战server

completionHandler : 这是一个block,第一个参数是一个NSURLSessionAuthChallengeDisposition类型的枚举,当disposition是NSURLSessionAuthChallengeUseCredential,则参数是为了验证证书用得,若是为nil,表明持续没有验证。若是没有声明此方法,则webviw响应份验证的挑战,disposition为NSURLSessionAuthChallengeRejectProtectionSpace。对象

/*
         NSURLSessionAuthChallengeUseCredential = 0,                     使用证书
         NSURLSessionAuthChallengePerformDefaultHandling = 1,            忽略证书(默认的处理方式)
         NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2,     忽略书证, 并取消此次请求
         NSURLSessionAuthChallengeRejectProtectionSpace = 3,            拒绝当前这一次, 下一次再询问
         */

大体弄明白了之后,就好办了,ssl

  1. 判断是不是信任服务器证书
  2. 若是是:告诉服务器,客户端信任证书,建立凭证对象,传递参数。
    // 判断是不是信任服务器证书
        if (challenge.protectionSpace.authenticationMethod != NSURLAuthenticationMethodServerTrust) {
            return;
        }
        
        // 告诉服务器,客户端信任证书
        // 建立凭证对象
        NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:challenge.protectionSpace.serverTrust];
        // 告诉服务器信任证书
        !completionHandler ? : completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
相关文章
相关标签/搜索