這是第一次在簡書寫東西,也是第一次在網(wǎng)絡(luò)上寫這類文章,所以寫得不好的話鸳吸,也請(qǐng)諒解下。
在網(wǎng)上找了許久速勇,沒找到一個(gè)完整的關(guān)于afn設(shè)置自簽名證書進(jìn)行https鏈接的文章晌砾,也許是我搜索的方式不對(duì),好在現(xiàn)在實(shí)現(xiàn)了afn使用自簽名證書進(jìn)行https鏈接快集。
https://example.com/jianshu.php
配置前準(zhǔn)備
-
cer證書文件
導(dǎo)入工程啥的也就不說了
下面開始干正經(jīng)事
- 導(dǎo)入文件到項(xiàng)目
- 為站點(diǎn)添加白名單
- 添加主要代碼
-(void)postToWeb{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 安全驗(yàn)證
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
/*
AFSSLPinningModeNone: 代表客戶端無條件地信任服務(wù)器端返回的證書。
AFSSLPinningModePublicKey: 代表客戶端會(huì)將服務(wù)器端返回的證書與本地保存的證書中个初,PublicKey的部分進(jìn)行校驗(yàn)乖寒;如果正確,才繼續(xù)進(jìn)行院溺。
AFSSLPinningModeCertificate: 代表客戶端會(huì)將服務(wù)器端返回的證書和本地保存的證書中的所有內(nèi)容楣嘁,包括PublicKey和證書部分,全部進(jìn)行校驗(yàn)珍逸;如果正確逐虚,才繼續(xù)進(jìn)行。
*/
securityPolicy.allowInvalidCertificates = YES;//是否信任非法證書(自建證書)
securityPolicy.validatesDomainName = NO;//是否驗(yàn)證域名有效性
manager.securityPolicy = securityPolicy;
NSDictionary *postDic = @{@"jianshu":@"1"};
[manager POST:@"https://example.com/jianshu.php" parameters:postDic progress:^(NSProgress * _Nonnull uploadProgress) {
}success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *resultStr = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"請(qǐng)求成功,%@",resultStr);
}failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"請(qǐng)求失敗:%@",error);
}];
}
工程一覽
抓包查看
已經(jīng)加密訪問了web了
假設(shè)服務(wù)器與內(nèi)置證書不符
那么好像就請(qǐng)求失敗了
而如果將
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
換成
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
AFSSLPinningModeNone: 代表客戶端無條件地信任服務(wù)器端返回的證書谆膳。
AFSSLPinningModePublicKey: 代表客戶端會(huì)將服務(wù)器端返回的證書與本地保存的證書中叭爱,PublicKey的部分進(jìn)行校驗(yàn);如果正確漱病,才繼續(xù)進(jìn)行买雾。
AFSSLPinningModeCertificate: 代表客戶端會(huì)將服務(wù)器端返回的證書和本地保存的證書中的所有內(nèi)容,包括PublicKey和證書部分杨帽,全部進(jìn)行校驗(yàn)漓穿;如果正確,才繼續(xù)進(jìn)行注盈。
那么返回的結(jié)果則
11月29日晃危,由于寫的時(shí)候想上傳demo的,后來忘了補(bǔ)充一點(diǎn):
以上是我的一些學(xué)習(xí)分享老客,做為自己的學(xué)習(xí)筆記
來自一名ios初學(xué)者的文章
對(duì)于這篇https鏈接的理解是:與服務(wù)器進(jìn)行交互時(shí)僚饭,用AFSSLPinningModeCertificate 驗(yàn)證了是我的服務(wù)器,然后使用https鏈接胧砰。 有出現(xiàn)中間人的話鳍鸵,那么必定是不正確的服務(wù)器證書,我的app驗(yàn)證不過 也就不能交互了吧朴则。不知道我理解錯(cuò)了沒有
也還有一個(gè)疑問权纤,不知道我這模擬虛假服務(wù)器的方式是否正確钓简。