iOS適配https(一) -- AFNetworking

前言

根據(jù)蘋果要求,2017必須要適配https。服務(wù)器端配置https需要一堆東西,這里就不詳述了,主要介紹客戶端的問題,而且是最簡(jiǎn)單的配置方式。

有的沒有配置證書只是簡(jiǎn)單設(shè)置了網(wǎng)絡(luò)請(qǐng)求的security也成功了,這里介紹的方式是配置證書的,更安全更有保障度。

這里先介紹AFNetworking的基本配置以及相關(guān)證書。

一、配置證書

1、服務(wù)器端證書配置好后可以給客戶端一個(gè)證書,后綴是.crt的,拿到手后轉(zhuǎn)成.der或.cer格式

  • .crt轉(zhuǎn).der方法 >

    openssl x509 -in Users/Jeffrey/ca.crt -out /Users/Jeffrey/ca.der -outform DER

  • .crt轉(zhuǎn).cer方法

    openssl x509 -in /Users/Jeffrey/ca.crt -out /Users/Jeffrey/ca.cer -outform DER

這個(gè)方法沒有測(cè)試成功,因?yàn)槲覀兒笈_(tái)人員沒有給我有效的證書。這個(gè)方法如果報(bào)錯(cuò)的話需要做相關(guān)驗(yàn)證。參考:https雙向認(rèn)證iOS客戶端處理

2、直接終端生成對(duì)應(yīng)的cer證書
這個(gè)方式會(huì)跳過服務(wù)器端給的證書一步,因?yàn)楹芏鄷r(shí)候你們都不清楚到底要哪個(gè)證書,也不知道哪里會(huì)出現(xiàn)錯(cuò)誤。

直接看命令:

openssl s_client -connect www.baidu.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > https.cer

百度的域名換成自己公司的,注意不要加http或https。如果貴公司的域名的https還沒有配置好,那么這步也會(huì)是無效的,會(huì)報(bào)錯(cuò)。

Expecting: TRUSTED CERTIFICATE

這個(gè)方法親測(cè)有效!

二、證書導(dǎo)入

直接拖進(jìn)去,記住這步。否則會(huì)沒有讀取到證書文件。


tip.png

三、AFNetworking單向驗(yàn)證設(shè)置

由于網(wǎng)絡(luò)庫沒有更新,所以這里使用的還是AFNetworking 2.6.0的相關(guān)配置,其實(shí)最近的也是一致的,配置的都是AFSecurityPolicy,是一致的。

+ (AFSecurityPolicy*)customSecurityPolicy
{
    // 先導(dǎo)入證書 -- 這里要判斷環(huán)境
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"server_staging" ofType:@"cer"];//證書的路徑
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    
    // AFSSLPinningModeCertificate 使用證書驗(yàn)證模式
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    
    // allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認(rèn)為NO
    // 如果是需要驗(yàn)證自建證書,需要設(shè)置為YES
    securityPolicy.allowInvalidCertificates = YES;
    
    //validatesDomainName 是否需要驗(yàn)證域名,默認(rèn)為YES;
    //假如證書的域名與你請(qǐng)求的域名不一致,需把該項(xiàng)設(shè)置為NO;如設(shè)成NO的話,即服務(wù)器使用其他可信任機(jī)構(gòu)頒發(fā)的證書,也可以建立連接,這個(gè)非常危險(xiǎn),建議打開。
    //置為NO,主要用于這種情況:客戶端請(qǐng)求的是子域名,而證書上的是另外一個(gè)域名。因?yàn)镾SL證書上的域名是獨(dú)立的,假如證書上注冊(cè)的域名是www.google.com,那么mail.google.com是無法驗(yàn)證通過的;當(dāng)然,有錢可以注冊(cè)通配符的域名*.google.com,但這個(gè)還是比較貴的。
    //如置為NO,建議自己添加對(duì)應(yīng)域名的校驗(yàn)邏輯。
    securityPolicy.validatesDomainName = NO;

    if (!certData) {
        return securityPolicy;
    }
    securityPolicy.pinnedCertificates = @[certData];
    
    return securityPolicy;
}

這里建議統(tǒng)一設(shè)置,否則每次請(qǐng)求再單獨(dú)添加會(huì)比較繁瑣。

_requestManager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[KYConfig defaultConfig].serverHostURL];
        NSMutableSet *contentTypes = [_requestManager.responseSerializer.acceptableContentTypes mutableCopy];
        [contentTypes addObject:@"application/json"];
        _requestManager.responseSerializer.acceptableContentTypes = [contentTypes copy];
        _requestManager.securityPolicy = [KYHTTPManager customSecurityPolicy];        

關(guān)于webView以及SDWebImage等后續(xù)篇章會(huì)繼續(xù)介紹,敬請(qǐng)關(guān)注。

下一篇:

iOS適配https(二)-- 黑魔法簡(jiǎn)單適配SDWebImage

相關(guān)參考:

https雙向認(rèn)證iOS客戶端處理
iOS 遷移到HTTPS(自建證書+單向驗(yàn)證+AF3.0+WKWebView+SDWebImage)

如果需要Demo請(qǐng)留言,會(huì)在后續(xù)版本中添加。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • HTTPS介紹 超文本傳輸安全協(xié)議(英語:Hypertext Transfer Protocol Secure,縮...
    齊滇大圣閱讀 9,217評(píng)論 8 96
  • 適配https 說明: 蘋果聲明從2017-01-01開始,所有提交的應(yīng)用必須使用更安全的https協(xié)議。 因此,...
    倔犟的貝殼閱讀 1,498評(píng)論 0 2
  • 本文來自 http://www.2cto.com/kf/201611/570823.html 蘋果官方在2017...
    生活本無度閱讀 6,458評(píng)論 1 5
  • 七點(diǎn)便出門了,戴上耳機(jī),在湖邊慢跑。今天換了一個(gè)風(fēng)格,沒有聽往常跑步必聽的快節(jié)奏,換成了京劇。跑步聽京劇,我這也算...
    落微閱讀 575評(píng)論 6 2
  • 這幾年,很少參加文學(xué)研討會(huì),總是怕聽到專家的發(fā)言:讀書的人少了,文學(xué)死了。在這個(gè)冬天,我收到山東桓臺(tái)作家徐艷寄來的...
    朱曉劍閱讀 1,134評(píng)論 0 1

友情鏈接更多精彩內(nèi)容