iOS AFNetworking 使用 HTTPS

聽(tīng)說(shuō)??在2017年1月1日將強(qiáng)制使用https不知真假???不管怎樣先用用吧。如果你的后臺(tái)開(kāi)始用https了,前端該做些啥呢?廢話不多少,直接來(lái)干貨!?。〈龝?huì)再來(lái)詳細(xì)解說(shuō)為什么。

首先要搞清楚你們后臺(tái)使用的是什么證書(shū)?是自建的證書(shū)還是CA機(jī)構(gòu)頒發(fā)的證書(shū)。

CA證書(shū)

1.升級(jí)AFNetworking到3.0(怎么升級(jí)?不要問(wèn)我)
2.在你使用AFNetworking中

- (NSURLSessionDataTask *)POST:(NSString *)URLString
                    parameters:(id)parameters
                      progress:(void (^)(NSProgress * _Nonnull))uploadProgress
                       success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
                       failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure

這個(gè)方法之前添加兩句代碼

//AFHTTPSessionManager *manager;
  AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:
AFSSLPinningModeNone];//AFSSLPinningModeNone, 是默認(rèn)的認(rèn)證方式,只會(huì)在系統(tǒng)的信任的證書(shū)列表中對(duì)服務(wù)端返回的證書(shū)進(jìn)行驗(yàn)證
  manager.securityPolicy = policy;

3.這樣理論上是可以進(jìn)行https請(qǐng)求了

自建證書(shū)

如果是自建證書(shū),那么需要后端提供一個(gè)ssl證書(shū),需要一個(gè) .crt 文件
1.然后前端可以使用openssl 進(jìn)行轉(zhuǎn)換:這樣你就可以得到一個(gè).cer文件,把這個(gè)文件加到工程里

1.打開(kāi)終端
2.輸入  openssl x509 -in 證書(shū)名.crt -out 證書(shū)名.cer -outform der

2.開(kāi)始寫(xiě)代碼,先寫(xiě)個(gè)方法

- (AFSecurityPolicy*)customSecurityPolicy
{
    //先導(dǎo)入證書(shū)
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"證書(shū)名" ofType:@"cer"];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:
AFSSLPinningModeCertificate];//AFSSLPinningModeCertificate  需要客戶端預(yù)先保存服務(wù)端的證書(shū)(自建證書(shū))
    
    // allowInvalidCertificates 是否允許無(wú)效證書(shū)(也就是自建的證書(shū)),默認(rèn)為NO
    // 如果是需要驗(yàn)證自建證書(shū),需要設(shè)置為YES
    securityPolicy.allowInvalidCertificates = YES;
    
    securityPolicy.pinnedCertificates = @[certData];
    
    return securityPolicy;
}

然后把之前添加的兩句代碼變成這一句

manager.securityPolicy = [self customSecurityPolicy];

原理

最好先了解下HTTP和HTTPS,可以參考:http://www.techug.com/https-ssl-tls
然后再了解下數(shù)字證書(shū)和CA:http://kb.cnblogs.com/page/194742/
簡(jiǎn)單來(lái)說(shuō)https就是在http外面加了一層保護(hù)膜,發(fā)起請(qǐng)求后服務(wù)端會(huì)先返回一個(gè)證書(shū),客戶端接收到并驗(yàn)證,然后加密傳輸。
NSURLSession主要通過(guò)代理方法

- (void)URLSession:(NSURLSession *)session 
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler 

而AFNetworking的AFSecurityPolicy類就是封裝了這個(gè)功能,所以在使用AFNetworking時(shí)只要加上AFSecurityPolicy就可以完成驗(yàn)證。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,580評(píng)論 0 13
  • 原文地址:iOS安全系列之一:HTTPS 如何打造一個(gè)安全的App?這是每一個(gè)移動(dòng)開(kāi)發(fā)者必須面對(duì)的問(wèn)題。在移動(dòng)Ap...
    violafa閱讀 885評(píng)論 0 2
  • iOS安全系列之一:HTTPS 2014-10-21 如何打造一個(gè)安全的App?這是每一個(gè)移動(dòng)開(kāi)發(fā)者必須面對(duì)的問(wèn)題...
    不作不會(huì)死閱讀 765評(píng)論 0 4
  • 本文分為以下五節(jié): 中間人攻擊:介紹中間人攻擊常見(jiàn)方法,并模擬了一個(gè)簡(jiǎn)單的中間人攻擊; 校驗(yàn)證書(shū)的正確姿勢(shì):介紹校...
    半島夏天閱讀 2,347評(píng)論 0 1
  • 這篇文章是我一邊學(xué)習(xí)證書(shū)驗(yàn)證一邊記錄的內(nèi)容,稍微整理了下,共扯了三部分內(nèi)容: HTTPS 簡(jiǎn)要原理;數(shù)字證書(shū)的內(nèi)容...
    左邊飛來(lái)一只狗閱讀 3,343評(píng)論 2 5