?只需要服務器驗證手機端的童鞋可以點開以下鏈接【ios 單向配置https】 http://www.cnblogs.com/OC888/p/6560602.html
兜兜轉轉弄了一個星期,網上的大多數demo都下來過一遍了,各種偏方都試了,終于配置好了雙向配置,網上大多數標題為雙向的文章都有不足之處,要么純粹就是服務器驗證手機端的單向認證,要么代碼不全,要么demo報錯。今天我來終結afn雙向配置https這個問題,想知道https原理的可以戳進文章開頭,里面有流程解釋,此文章只負責代碼部分,文章末尾放demo,好使請點贊
第一步,infoplist添加ATS(應用傳輸秘密設置),如下圖:
什么?看不到。。。后面是什么字母?沒錯就是這么坑,老汁就是被某人的教程這么坑過整整一天,下面放完整的string:NSExceptionAllowsInsecureHTTPLoads ?NSExceptionRequiresForwardSecrecy ? NSIncludesSubdomains,依次對應的布爾值為是非是,(此外多加一處報錯信息處理方法:報錯信息為
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里的全部代碼復制替換。
第三步 ?添加兩個證書,1,【服務器.cer 證書】,包含公鑰,客戶端用它來加密,然后服務器會用這個證書的私鑰解密,這樣可以服務器確認發來的消息是正兒八經的app傳來的信息
2,【客戶端的.p12證書】,說到p12我就猜想應該是為了不讓破解了軟件ipa的人拿到證書才導出成p12格式的,但是想不明白為什么【服務器.cer】證書不導成p12?望大神解答疑惑感激不盡,另外問后臺要這兩個證書的時候記得要p12的密碼
第四步 DEMO里面ReSetChallenge的.m和.h是對afn的二次封裝,直接拿來食用即可,但是切記要改證書名和p12密碼,里面封裝了分別返回單向認證和雙向認證的
AFHTTPSessionManager方法,最后放demo地址,涉及公司機密本人證書已刪除,直接放進證書即可使用(https://github.com/OC888/omits),如果有疑問可直接微博留言,作者會一一回答