iOS https雙向配置 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)

   只須要服務器驗證手機端的童鞋能夠點開如下連接【ios 單向配置httpshttp://www.cnblogs.com/OC888/p/6560602.htmlhtml

  兜兜轉轉弄了一個星期,網上的大多數demo都下來過一遍了,各類偏方都試了,終於配置好了雙向配置,網上大多數標題爲雙向的文章都有不足之處,要麼純粹就是服務器驗證手機端的單向認證,要麼代碼不全,要麼demo報錯。今天我來終結afn雙向配置https這個問題,想知道https原理的能夠戳進文章開頭,裏面有流程解釋,此文章只負責代碼部分,文章末尾放demo,好使請點贊ios

第一步,infoplist添加ATS(應用傳輸祕密設置),以下圖:git

     什麼?看不到。。。後面是什麼字母?沒錯就是這麼坑,老汁就是被某人的教程這麼坑過整整一天,下面放完整的string:NSExceptionAllowsInsecureHTTPLoads  NSExceptionRequiresForwardSecrecy       NSIncludesSubdomains,依次對應的布爾值爲是非是,(此外多加一處報錯信息處理方法:報錯信息爲github

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)

這個問題的出現是由於ios9裏對TLS的版本配置爲1.2;而服務器使用Tomcat配置時,默認爲1.0;因此解決方法是在剛纔infoplist三個布爾值後添加一對<key>NSExceptionMinimumTLSVersion</key>
      <string>TLSv1.0</string>)以下圖:服務器

 

第二步,須要提早說明的是,務必使用afn3.0或者以上版本,由於afn支持的證書格式從2.x的.cer變成了3.x的.der,因此我私自改了一下AFHTTPSessionManager.m的所有代碼,文件在demo中,須要的話直接拉走修改便可,或者直接在本文末尾處複製AFHTTPSessionManager.m的代碼,若是本身工程裏的afn版本報錯沒有找到某些方法或者頭文件,那就升級成最新版本的afn,而後把新版本里的AFHTTPSessionManager.m的代碼用demo的AFHTTPSessionManager.m裏的所有代碼複製替換。app

第三步  添加兩個證書,1,【服務器.cer 證書】,包含公鑰,客戶端用它來加密,而後服務器會用這個證書的私鑰解密,這樣能夠服務器確認發來的消息是正兒八經的app傳來的信息dom

            2,【客戶端的.p12證書】,說到p12我就猜測應該是爲了避免讓破解了軟件ipa的人拿到證書才導出成p12格式的,可是想不明白爲何【服務器.cer】證書不導成p12?望大神解答疑惑感激涕零,另外問後臺要這兩個證書的時候記得要p12的密碼post

第四步 DEMO裏面ReSetChallenge的.m和.h是對afn的二次封裝,直接拿來食用便可,可是切記要改證書名和p12密碼,裏面封裝了分別返回單向認證和雙向認證的ui

AFHTTPSessionManager方法,最後放demo地址,涉及公司機密本人證書已刪除,直接放進證書便可使用(https://github.com/OC888/omits),若是有疑問可直接微博留言,做者會一一回答加密

相關文章
相關標籤/搜索