這是第一次在簡書寫東西,也是第一次在網(wǎng)絡(luò)上寫這類文章,所以寫得不好的話,也請諒解下。
在網(wǎng)上找了許久,沒找到一個完整的關(guān)于afn設(shè)置自簽名證書進行https鏈接的文章,也許是我搜索的方式不對,好在現(xiàn)在實現(xiàn)了afn使用自簽名證書進行https鏈接。
https://example.com/jianshu.php
配置前準(zhǔn)備
-
cer證書文件
屏幕快照 2016-11-26 下午3.31.00.png
導(dǎo)入工程啥的也就不說了
下面開始干正經(jīng)事
- 導(dǎo)入文件到項目

cer、afn導(dǎo)入工程
- 為站點添加白名單

白名單
- 添加主要代碼
-(void)postToWeb{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 安全驗證
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
/*
AFSSLPinningModeNone: 代表客戶端無條件地信任服務(wù)器端返回的證書。
AFSSLPinningModePublicKey: 代表客戶端會將服務(wù)器端返回的證書與本地保存的證書中,PublicKey的部分進行校驗;如果正確,才繼續(xù)進行。
AFSSLPinningModeCertificate: 代表客戶端會將服務(wù)器端返回的證書和本地保存的證書中的所有內(nèi)容,包括PublicKey和證書部分,全部進行校驗;如果正確,才繼續(xù)進行。
*/
securityPolicy.allowInvalidCertificates = YES;//是否信任非法證書(自建證書)
securityPolicy.validatesDomainName = NO;//是否驗證域名有效性
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(@"請求成功,%@",resultStr);
}failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"請求失敗:%@",error);
}];
}
工程一覽

工程
抓包查看

抓包結(jié)果
已經(jīng)加密訪問了web了
假設(shè)服務(wù)器與內(nèi)置證書不符

另一個cre證書文件
那么好像就請求失敗了

失敗
而如果將
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
換成
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
AFSSLPinningModeNone: 代表客戶端無條件地信任服務(wù)器端返回的證書。
AFSSLPinningModePublicKey: 代表客戶端會將服務(wù)器端返回的證書與本地保存的證書中,PublicKey的部分進行校驗;如果正確,才繼續(xù)進行。
AFSSLPinningModeCertificate: 代表客戶端會將服務(wù)器端返回的證書和本地保存的證書中的所有內(nèi)容,包括PublicKey和證書部分,全部進行校驗;如果正確,才繼續(xù)進行。
那么返回的結(jié)果則

不校驗證書的交互
11月29日,由于寫的時候想上傳demo的,后來忘了補充一點:

注釋afn中的兩行代碼
以上是我的一些學(xué)習(xí)分享,做為自己的學(xué)習(xí)筆記
來自一名ios初學(xué)者的文章對于這篇https鏈接的理解是:與服務(wù)器進行交互時,用AFSSLPinningModeCertificate 驗證了是我的服務(wù)器,然后使用https鏈接。 有出現(xiàn)中間人的話,那么必定是不正確的服務(wù)器證書,我的app驗證不過 也就不能交互了吧。不知道我理解錯了沒有
也還有一個疑問,不知道我這模擬虛假服務(wù)器的方式是否正確。
