2015年9月17日凌晨,蘋果給用戶推送了iOS9正式版,隨著有用戶陸續(xù)升級iOS9
iOS9讓所有的HTTP默認使用了HTTPS豁鲤,原來的HTTP協(xié)議傳輸都改成TLS1.2協(xié)議進行傳輸猛们。
直接造成的情況就是App發(fā)請求的時候彈出網(wǎng)絡無法連接希俩。
----1----https證書請求校驗
- 命令行
nscurl --ats-diagnostics --verbose https://www.baidu.com - 騰訊云
[騰訊云](https://www.qcloud.com/product/ssl
----2----info.plist設(shè)置
info.plist里面把
App Transport Security Settings
Allow Arbitrary Loads 設(shè)置為NO
----3----證書轉(zhuǎn)化
命令行
openssl x509 -in 1.crt -out YJHhttps.cer -outform der
1.crt(后臺給的證書)
YJHhttps.cer(導出自己用的證書)通過安裝crt文件典挑,電腦導出
1)先打開“鑰匙串訪問”
2)選中你安裝的crt文件證書酥宴,選擇“文件”--》“導出項目”
----4----把證書導入項目-代碼適配
#pragma mark -----適配Https證書
+ (AFSecurityPolicy *)customSecurityPolicy
{
//先導入證書,找到證書的路徑
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"YJHhttps" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
//AFSSLPinningModeCertificate 使用證書驗證模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//allowInvalidCertificates 是否允許無效證書(也就是自建的證書)您觉,默認為NO
//如果是需要驗證自建證書拙寡,需要設(shè)置為YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要驗證域名,默認為YES琳水;
//假如證書的域名與你請求的域名不一致肆糕,需把該項設(shè)置為NO;如設(shè)成NO的話在孝,即服務器使用其他可信任機構(gòu)頒發(fā)的證書诚啃,也可以建立連接,這個非常危險私沮,建議打開始赎。
//置為NO,主要用于這種情況:客戶端請求的是子域名顾彰,而證書上的是另外一個域名极阅。因為SSL證書上的域名是獨立的,假如證書上注冊的域名是www.google.com涨享,那么mail.google.com是無法驗證通過的筋搏;當然,有錢可以注冊通配符的域名*.google.com厕隧,但這個還是比較貴的奔脐。
//如置為NO,建議自己添加對應域名的校驗邏輯吁讨。
securityPolicy.validatesDomainName = NO;
NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];
securityPolicy.pinnedCertificates = set;
return securityPolicy;
}
//---使用這個屬性AFSSLPinningModeCertificate
AFSSLPinningModeNone: 代表客戶端無條件地信任服務器端返回的證書髓迎。
AFSSLPinningModePublicKey: 代表客戶端會將服務器端返回的證書與本地保存的證書中,PublicKey的部分進行校驗建丧;如果正確排龄,才繼續(xù)進行。
AFSSLPinningModeCertificate: 代表客戶端會將服務器端返回的證書和本地保存的證書中的所有內(nèi)容翎朱,包括PublicKey和證書部分橄维,全部進行校驗;如果正確拴曲,才繼續(xù)進行争舞。