設置AFN請求管理者的時候?添加?https?ssl?驗證。
//?1.獲得請求管理者
AFHTTPSessionManager*manager?=?[AFHTTPSessionManagermanager];
//?2.加上這個函數(shù),https?ssl?驗證。
[managersetSecurityPolicy:[selfcustomSecurityPolicy]];
//?https?ssl?驗證函數(shù)
-?(AFSecurityPolicy*)customSecurityPolicy?{
//?先導入證書?證書由服務端生成,具體由服務端人員操作
NSString*cerPath?=?[[NSBundlemainBundle]pathForResource:@"xxx"ofType:@"cer"];//證書的路徑
NSData*cerData?=?[NSDatadataWithContentsOfFile:cerPath];
//?AFSSLPinningModeCertificate?使用證書驗證模式
AFSecurityPolicy*securityPolicy?=?[AFSecurityPolicypolicyWithPinningMode:AFSSLPinningModeCertificate];
//?allowInvalidCertificates?是否允許無效證書(也就是自建的證書),默認為NO
//?如果是需要驗證自建證書,需要設置為YES
securityPolicy.allowInvalidCertificates=YES;
//validatesDomainName?是否需要驗證域名,默認為YES;
//假如證書的域名與你請求的域名不一致,需把該項設置為NO;如設成NO的話,即服務器使用其他可信任機構(gòu)頒發(fā)的證書,也可以建立連接,這個非常危險,建議打開。
//置為NO,主要用于這種情況:客戶端請求的是子域名,而證書上的是另外一個域名。因為SSL證書上的域名是獨立的,假如證書上注冊的域名是www.google.com,那么mail.google.com是無法驗證通過的;當然,有錢可以注冊通配符的域名*.google.com,但這個還是比較貴的。
//如置為NO,建議自己添加對應域名的校驗邏輯。
securityPolicy.validatesDomainName=NO;
securityPolicy.pinnedCertificates=?[[NSSetalloc]initWithObjects:cerData,nilnil];
returnsecurityPolicy;
}
三.關于證書?參考文章:http://www.2cto.com/Article/201510/444706.html
服務端給的是crt后綴的證書,其中iOS客戶端用到的cer證書,是需要開發(fā)人員轉(zhuǎn)換:
1.證書轉(zhuǎn)換
在服務器人員,給你發(fā)送的crt證書后,進到證書路徑,執(zhí)行下面語句
openssl?x509-in?你的證書.crt-out?你的證書.cer-outform?der
這樣你就可以得到cer類型的證書了。雙擊,導入電腦。
2.證書放入工程
1、可以直接把轉(zhuǎn)換好的cer文件拖動到工程中。
2、可以在鑰匙串內(nèi),找到你導入的證書,單擊右鍵,導出項目,就可以導出.cer文件的證書了
參考鏈接:http://www.lxweimin.com/p/97745be81d64。
四.在info.plist去掉之前允許http加載的代碼?就是刪除下面的代碼(么有的就省了這一步)
NSAppTransportSecurity
NSAllowsArbitraryLoads