適配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);
相關文章
相關標籤/搜索