iOS AFN通過(guò)自簽證書(shū)配置https、添加http例外和自簽根證書(shū)不能握手成功問(wèn)題

首先上自簽證書(shū)AFN需要修改的代碼:

+ (AFSecurityPolicy*)customSecurityPolicy
{
    // /先導(dǎo)入證書(shū)
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxxx" ofType:@"cer"];//證書(shū)的路徑
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    
    // AFSSLPinningModeCertificate 使用證書(shū)驗(yàn)證模式
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    
    // allowInvalidCertificates 是否允許無(wú)效證書(shū)(也就是自建的證書(shū))冶共,默認(rèn)為NO
    // 如果是需要驗(yàn)證自建證書(shū)乾蛤,需要設(shè)置為YES
    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)然,有錢(qián)可以注冊(cè)通配符的域名*.google.com卧秘,但這個(gè)還是比較貴的呢袱。
    //如置為NO,建議自己添加對(duì)應(yīng)域名的校驗(yàn)邏輯翅敌。
    securityPolicy.validatesDomainName = NO;
    
    securityPolicy.pinnedCertificates = [[NSArray alloc]initWithObjects:certData, nil];
    return securityPolicy;
}

+ (void)initialize
{
    if (!requestManager) {
       requestManager = [AFHTTPRequestOperationManager manager];
       [requestManager setSecurityPolicy:[self customSecurityPolicy]];
    }
}

cer文件是服務(wù)器同事給你的羞福,你添加到工程就可以了。
如果服務(wù)器給的是crt文件蚯涮,就需要自己轉(zhuǎn)換下:
需要cd到證書(shū)所在路徑
openssl x509 -in 你的證書(shū).crt -out 你的證書(shū).cer -outform der

關(guān)于證書(shū)的相關(guān)要求需要注意以下幾點(diǎn):

These are the App Transport Security requirements:

The protocol Transport Security Layer (TLS) must be at least version 1.2.
Connection ciphers are limited to those that provide forward secrecy (see the list of ciphers below.)
Certificates must use at least an SHA256 fingerprint with either a 2048 bit or greater RSA key, or a 256 bit or greater Elliptic-Curve (ECC) key.

根據(jù)原文描述治专,首先必須要基于TLS 1.2版本協(xié)議。再來(lái)就是連接的加密方式要提供Forward Secrecy遭顶,文檔中羅列出支持的加密算法看靠。最后就是證書(shū)至少要使用一個(gè)SHA256的指紋與任一個(gè)2048位或者更高位的RSA密鑰,或者是256位或者更高位的ECC密鑰液肌。如果不符合其中一項(xiàng),請(qǐng)求將被中斷并返回nil鸥滨。

支持forward secrecy的加密方式:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

下面是我自己用的自簽證書(shū)的部分信息


2D355F4B-7399-47D2-9B3D-EA90E7657858.png

有很大情況會(huì)出現(xiàn)NSURLErrorDomain -1012這個(gè)問(wèn)題:
你可以使用以下命令去獲取服務(wù)器的公開(kāi)二進(jìn)制證書(shū):

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

你把百度的域名換成自己服務(wù)器的去生成嗦哆。

如果是經(jīng)過(guò)第三方認(rèn)證的就換掉域名就可以了谤祖,其他都不需要?jiǎng)印?/p>

如果需要知道是否符合ATS要求,使用命令:

nscurl --ats-diagnostics --verbose https://example.com

我們可以看看百度返回的:

TLSv1.0 with PFS disabled and insecure HTTP allowed
ATS Dictionary:
{ 
      NSExceptionDomains = { 
                "www.baidu.com" = { 
                       NSExceptionAllowsInsecureHTTPLoads = true; 
                       NSExceptionMinimumTLSVersion = "TLSv1.0"; 
                       NSExceptionRequiresForwardSecrecy = false; 
                     }; 
                };
}
Result : PASS

然后我們看看怎么添加http例外


4DB59F0A-2876-4E2E-A874-37C4B711FA72.png

在info.plist里面添加這些屬性老速。用紅線擦掉的就是域名粥喜;然后設(shè)置下面兩個(gè)屬性

1444620857374773.png

關(guān)于域名比如:http://appweb.xxxx.com
我們填寫(xiě)的是xxxx.com就是一級(jí)域名或者叫二級(jí)域名com頂級(jí)域名前面那個(gè)就可以了。

最后關(guān)于CA.cer(自簽的根證書(shū))證書(shū)導(dǎo)入項(xiàng)目不能正常和服務(wù)器驗(yàn)證問(wèn)題橘券。下面是我的根證書(shū)一些信息:

屏幕快照 2016-12-21 下午4.35.07.png

因?yàn)槲覀児井a(chǎn)品需要幾個(gè)域名或者IP额湘,當(dāng)某個(gè)出現(xiàn)問(wèn)題能自動(dòng)切換到另外一個(gè)。這就導(dǎo)致可能需要幾個(gè)cer證書(shū)旁舰。如果能用根證書(shū)就不需要一個(gè)域名對(duì)應(yīng)一個(gè)證書(shū)锋华,但是一直不能跑起來(lái)。

為了驗(yàn)證箭窜,我們把CA證書(shū)通過(guò)郵件發(fā)送到iPhone手機(jī)毯焕。然后在描述文件里面手動(dòng)安裝(好像必須要用蘋(píng)果自帶的郵箱)。然后跑起來(lái)了磺樱。
我個(gè)人認(rèn)為是因?yàn)樽院灥腃A證書(shū)是不受蘋(píng)果信任的第三方機(jī)構(gòu)頒發(fā)的纳猫。所以不管你怎么設(shè)置都是不能像上面一樣成功。除非在手機(jī)自己安裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竹捉,一起剝皮案震驚了整個(gè)濱河市芜辕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌块差,老刑警劉巖侵续,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異憾儒,居然都是意外死亡询兴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)起趾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诗舰,“玉大人,你說(shuō)我怎么就攤上這事训裆】舾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵边琉,是天一觀的道長(zhǎng)属百。 經(jīng)常有香客問(wèn)我,道長(zhǎng)变姨,這世上最難降的妖魔是什么族扰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上渔呵,老公的妹妹穿的比我還像新娘怒竿。我一直安慰自己,他們只是感情好扩氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布耕驰。 她就那樣靜靜地躺著,像睡著了一般录豺。 火紅的嫁衣襯著肌膚如雪朦肘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天双饥,我揣著相機(jī)與錄音媒抠,去河邊找鬼。 笑死兢哭,一個(gè)胖子當(dāng)著我的面吹牛领舰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迟螺,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼冲秽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了矩父?” 一聲冷哼從身側(cè)響起锉桑,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窍株,沒(méi)想到半個(gè)月后民轴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡球订,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年后裸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冒滩。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡微驶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出开睡,到底是詐尸還是另有隱情因苹,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布篇恒,位于F島的核電站扶檐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胁艰。R本人自食惡果不足惜款筑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一智蝠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奈梳,春花似錦寻咒、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饭寺。三九已至阻课,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艰匙,已是汗流浹背限煞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留员凝,地道東北人署驻。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像健霹,于是被迫代替她去往敵國(guó)和親旺上。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 背景 谷歌從 2017 年起糖埋,Chrome 瀏覽器將也會(huì)把采用 HTTP 協(xié)議的網(wǎng)站標(biāo)記為「不安全」網(wǎng)站宣吱;蘋(píng)果從 ...
    人魔七七閱讀 2,624評(píng)論 2 8
  • 這篇文章是我一邊學(xué)習(xí)證書(shū)驗(yàn)證一邊記錄的內(nèi)容,稍微整理了下瞳别,共扯了三部分內(nèi)容: HTTPS 簡(jiǎn)要原理征候;數(shù)字證書(shū)的內(nèi)容...
    左邊飛來(lái)一只狗閱讀 3,292評(píng)論 2 5
  • HTTPS介紹 超文本傳輸安全協(xié)議(英語(yǔ):Hypertext Transfer Protocol Secure,縮...
    齊滇大圣閱讀 8,919評(píng)論 8 96
  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,521評(píng)論 0 13
  • 一祟敛、作用 不使用SSL/TLS的HTTP通信疤坝,就是不加密的通信。所有信息明文傳播馆铁,帶來(lái)了三大風(fēng)險(xiǎn)跑揉。 (1)竊聽(tīng)風(fēng)險(xiǎn)...
    XLsn0w閱讀 10,527評(píng)論 2 44