项目中WKWebvie加载https链接加载网页,因此要适配https,
事先声明呀,这里会有两种情况:
一种大厂的ssl证书,比如苹果,百度等等,以为是大厂,所以加载apple,默认就是信任的,为啥,哈哈,因为,规矩都是被大厂规定的。
第二中,就是人们所所的私人证书,这里,我们就要写代码选择信任我们要访问的网络的证书了,否则,就访问不了。
我们看到,这是一个可选的代理方法,因此要遵守代理方法,navigationDelegate = self
一看,满是英文,一头雾水,然后费劲心思,琢磨了一番,
描述:当webview需要响应身份验证的挑战,会调用此方法
challenge:身份验证的挑战
completionHandler : 这是一个block,第一个参数是一个NSURLSessionAuthChallengeDisposition类型的枚举,当disposition是NSURLSessionAuthChallengeUseCredential,则参数是为了验证证书用得,如果为nil,代表持续没有验证。如果没有声明此方法,则webviw响应份验证的挑战,disposition为NSURLSessionAuthChallengeRejectProtectionSpace。
/*
NSURLSessionAuthChallengeUseCredential = 0, 使用证书
NSURLSessionAuthChallengePerformDefaultHandling = 1, 忽略证书(默认的处理方式)
NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2, 忽略书证, 并取消这次请求
NSURLSessionAuthChallengeRejectProtectionSpace = 3, 拒绝当前这一次, 下一次再询问
*/
大致弄明白了以后,就好办了,
- 判断是否是信任服务器证书
- 如果是:告诉服务器,客户端信任证书,创建凭证对象,传递参数。
// 判断是否是信任服务器证书 if (challenge.protectionSpace.authenticationMethod != NSURLAuthenticationMethodServerTrust) { return; } // 告诉服务器,客户端信任证书 // 创建凭证对象 NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:challenge.protectionSpace.serverTrust]; // 告诉服务器信任证书 !completionHandler ? : completionHandler(NSURLSessionAuthChallengeUseCredential, credential);