一、準(zhǔn)備證書(shū)
1.證書(shū)轉(zhuǎn)換
服務(wù)器開(kāi)發(fā)人員會(huì)給你一個(gè)crt證書(shū),你把證書(shū)放到桌面上,然后打開(kāi)終端,輸入下面命令
openssl x509 -in 你的crt證書(shū)路徑 -out 你要轉(zhuǎn)成cer證書(shū)的路徑 -outform der
這樣你就得到cer證書(shū)了。
2.把cer證書(shū)導(dǎo)入項(xiàng)目里,直接拖入工程即可。
注意:如果服務(wù)器給你的證書(shū)直接是cer證書(shū),不要將證書(shū)直接拖入工程,會(huì)報(bào)錯(cuò)。要將給你的cer證書(shū)后綴名改成crt,然后再執(zhí)行上面的操作。(因?yàn)槲覀兎?wù)器給我的證書(shū)就是cer證書(shū),然后我直接導(dǎo)入工程用,結(jié)果校驗(yàn)證書(shū)時(shí)崩潰,后來(lái)我把證書(shū)后綴改成crt,又重新導(dǎo)出cer證書(shū),才正常)
二、代碼部分
1.支持https (不校驗(yàn)證書(shū),可以抓包查看)
// 1.初始化單例類
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.設(shè)置非校驗(yàn)證書(shū)模式
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
manager.securityPolicy.allowInvalidCertificates = YES;
[manager.securityPolicy setValidatesDomainName:NO];
2.支持https (校驗(yàn)證書(shū),不可以抓包)
// 1.初始化單例類
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// AFSSLPinningModeCertificate 使用證書(shū)驗(yàn)證模式
manager.securityPolicy= [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// 2.設(shè)置證書(shū)模式
NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"證書(shū)名" ofType:@"cer"];
NSData * cerData = [NSData dataWithContentsOfFile:cerPath];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:cerData, nil]];
// allowInvalidCertificates 是否允許無(wú)效證書(shū)(也就是自建的證書(shū)),默認(rèn)為NO
// 如果是需要驗(yàn)證自建證書(shū),需要設(shè)置為YES
mgr.securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要驗(yàn)證域名,默認(rèn)為YES;
//假如證書(shū)的域名與你請(qǐng)求的域名不一致,需把該項(xiàng)設(shè)置為NO;如設(shè)成NO的話,即服務(wù)器使用其他可信任機(jī)構(gòu)頒發(fā)的證書(shū),也可以建立連接,這個(gè)非常危險(xiǎn),建議打開(kāi)。
//置為NO,主要用于這種情況:客戶端請(qǐng)求的是子域名,而證書(shū)上的是另外一個(gè)域名。因?yàn)镾SL證書(shū)上的域名是獨(dú)立的,假如證書(shū)上注冊(cè)的域名是www.google.com,那么mail.google.com是無(wú)法驗(yàn)證通過(guò)的;當(dāng)然,有錢可以注冊(cè)通配符的域名*.google.com,但這個(gè)還是比較貴的。
//如置為NO,建議自己添加對(duì)應(yīng)域名的校驗(yàn)邏輯。
[mgr.securityPolicy setValidatesDomainName:NO];
三、使用Charles抓包https
請(qǐng)參考http://www.lxweimin.com/p/97745be81d64 作者:徐不同
多有借鑒