iOS開(kāi)發(fā)中的https(一):基本概念

蘋果公司在2016的開(kāi)發(fā)者大會(huì)上宣布:到2017年,所有的iOS應(yīng)用都必須使用HTTPS與服務(wù)器進(jìn)行通信板祝。iOS開(kāi)發(fā)者應(yīng)該都不會(huì)對(duì)這個(gè)決定感到驚訝肛循,因?yàn)樽詉OS9就已經(jīng)引入了ATS(應(yīng)用傳輸安全App Transport Security)特性,該特性對(duì)應(yīng)用的安全傳輸做出了以下要求:

1.The protocol Transport Security Layer (TLS) must be at least version 1.2.

2.Connection ciphers are limited to those that provide forward secrecy (see the list of ciphers below.)

3.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.

不符合以上條件的任意一項(xiàng)蚊夫,網(wǎng)絡(luò)請(qǐng)求將會(huì)被中斷并返回空值诉字。 不明覺(jué)厲地找到了一個(gè)翻譯版:

蘋果ATS對(duì)HTTPS證書(shū)的要求

啟用ATS必須符合以下標(biāo)準(zhǔn),不滿足條件的HTTPS證書(shū)知纷,ATS都會(huì)拒絕連接:

* 服務(wù)器所有的連接使用TLS1.2以上版本

* HTTPS證書(shū)必須使用SHA256以上哈希算法簽名

* HTTPS證書(shū)必須使用RSA 2048位或ECC 256位以上公鑰算法

* 使用前向加密技術(shù)

雖然蘋果官方最近發(fā)布聲明說(shuō)最后期限延遲了壤圃,不過(guò)還是未雨綢繆為好,本文就先對(duì)https相關(guān)的一些基本概念進(jìn)行闡述琅轧。

HTTPS的原理及運(yùn)行機(jī)制

HTTPS 以及SSL/TSL

什么是SSL伍绳?

SSL(Secure Sockets Layer, 安全套接字層),因?yàn)樵然ヂ?lián)網(wǎng)上使用的 HTTP 協(xié)議是明文的乍桂,存在很多缺點(diǎn)冲杀,比如傳輸內(nèi)容會(huì)被偷窺(嗅探)和篡改。 SSL 協(xié)議的作用就是在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密模蜡。

何為TLS漠趁?

到了1999年,SSL 因?yàn)閼?yīng)用廣泛忍疾,已經(jīng)成為互聯(lián)網(wǎng)上的事實(shí)標(biāo)準(zhǔn)闯传。IETF 就在那年把 SSL 標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化之后的名稱改為 TLS(Transport Layer Security卤妒,傳輸層安全協(xié)議)甥绿。SSL與TLS可以視作同一個(gè)東西的不同階段

HTTPS

簡(jiǎn)單來(lái)說(shuō)字币,HTTPS = HTTP + SSL/TLS, 也就是 HTTP over SSL 或 HTTP over TLS,這是后面加 S 的由來(lái) 共缕。

HTTPS和HTTP異同:HTTP和HTTPS使用的是完全不同的連接方式洗出,用的端口也不一樣,前者是80图谷,后者是443翩活。HTTP的連接很簡(jiǎn)單,是無(wú)狀態(tài)的便贵;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸菠镇、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比HTTP協(xié)議安全承璃。

首先利耍,不使用SSL/TLS的HTTP通信,是不加密的通信盔粹,這顯然不能保證客戶的信息安全隘梨。在文章iOS開(kāi)發(fā)中使用keyChain保存用戶密碼中,辛辛苦苦地將用戶名密碼能夠安全地存儲(chǔ)在keyChain中(不越獄的前提下)舷嗡,但是如果用戶名密碼就這樣明文地發(fā)送出去轴猎,一旦被截獲,后果可想而知咬崔。當(dāng)然税稼,我們很自然地就會(huì)想到將用戶密碼字符串進(jìn)行MD5加密后,再通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)器垮斯,比如:

NSString *sourceStr = [NSString stringWithFormat:@"attach=iOS&chartset=utf-8&format=json&partner=google&userid=%@&password=%@”,userid,password];

NSString *signStr = [NSString md5String:sourceStr];

但即便如此也不能保證安全郎仆,因?yàn)榇嬖谂鲎补簟jP(guān)于碰撞攻擊兜蠕,可以閱讀安全科普:密碼學(xué)之碰撞攻擊一文扰肌。

于是,為了實(shí)現(xiàn)通信的安全熊杨,SSL/TLS協(xié)議采用公鑰加密法曙旭,其運(yùn)行的基本流程是:

* 客戶端向服務(wù)器端索要并驗(yàn)證公鑰;

* 雙方協(xié)商生成"對(duì)話密鑰"晶府;

* 雙方采用"對(duì)話密鑰"進(jìn)行加密通信桂躏。

其中,第1和2步被稱為握手階段川陆。握手階段的細(xì)節(jié)這里就不贅述剂习,我們只需要知道,通過(guò)握手階段,客戶端和服務(wù)器端主要交換了3個(gè)信息:

1鳞绕、數(shù)字證書(shū)失仁。該信息是我們進(jìn)行開(kāi)發(fā)需要關(guān)注的!數(shù)字證書(shū)包含了公鑰等信息们何,一般由服務(wù)器發(fā)給客戶端萄焦,接收方通過(guò)驗(yàn)證這個(gè)證書(shū)是不是由信賴的CA簽發(fā),或者與本地的證書(shū)相對(duì)比冤竹,來(lái)判斷證書(shū)是否可信拂封;假如需要雙向驗(yàn)證,則服務(wù)器和客戶端都需要發(fā)送數(shù)字證書(shū)給對(duì)方驗(yàn)證贴见;

2烘苹、3個(gè)隨機(jī)數(shù)。3個(gè)隨機(jī)數(shù)是用于生成對(duì)話密鑰的片部,我們不需要關(guān)心這細(xì)節(jié);解釋如下(可忽略):

首先客戶端先發(fā)第一個(gè)隨機(jī)數(shù)N1霜定,然后服務(wù)器回了第二個(gè)隨機(jī)數(shù)N2(這個(gè)過(guò)程同時(shí)把之前提到的證書(shū)發(fā)給客戶端)档悠,這兩個(gè)隨機(jī)數(shù)都是明文的;而第三個(gè)隨機(jī)數(shù)N3(這個(gè)隨機(jī)數(shù)被稱為Premaster secret)望浩,客戶端用數(shù)字證書(shū)的公鑰進(jìn)行非對(duì)稱加密辖所,發(fā)給服務(wù)器;而服務(wù)器用只有自己知道的私鑰來(lái)解密磨德,獲取第三個(gè)隨機(jī)數(shù)缘回。只有,服務(wù)端和客戶端都有了三個(gè)隨機(jī)數(shù)N1+N2+N3典挑,然后兩端就使用這三個(gè)隨機(jī)數(shù)來(lái)生成“對(duì)話密鑰”酥宴,在此之后的通信都是使用這個(gè)“對(duì)話密鑰”來(lái)進(jìn)行對(duì)稱加密解密。因?yàn)檫@個(gè)過(guò)程中您觉,服務(wù)端的私鑰只用來(lái)解密第三個(gè)隨機(jī)數(shù)拙寡,從來(lái)沒(méi)有在網(wǎng)絡(luò)中傳輸過(guò),這樣的話琳水,只要私鑰沒(méi)有被泄露肆糕,那么數(shù)據(jù)就是安全的。

3在孝、加密通信協(xié)議诚啃。客戶端和服務(wù)器端通信需要采取同樣的加密通信協(xié)議私沮,我們也不需要太關(guān)注始赎。

SSL四次握手的另一種解釋:

瀏覽器將通過(guò)網(wǎng)絡(luò)發(fā)送請(qǐng)求安全會(huì)話的消息(通常請(qǐng)求以 https 而非 http 開(kāi)頭的 URL)。

1.服務(wù)器通過(guò)發(fā)送其證書(shū)(包括公鑰)進(jìn)行響應(yīng)。

2.瀏覽器將檢驗(yàn)服務(wù)器的證書(shū)是否有效极阅,并檢驗(yàn)該證書(shū)是否是由其證書(shū)位于瀏覽器的數(shù)據(jù)庫(kù)中的(并且是可信的)CA 所簽發(fā)的胃碾。它還將檢驗(yàn) CA 證書(shū)是否已過(guò)期。

3.如果證書(shū)有效筋搏,瀏覽器將生成一個(gè)==一次性的仆百、唯一的==會(huì)話密鑰,并使用服務(wù)器的公鑰對(duì)該會(huì)話密鑰進(jìn)行加密奔脐。然后俄周,瀏覽器將把加密的會(huì)話密鑰發(fā)送給服務(wù)器,這樣服務(wù)器和瀏覽器都有一份會(huì)話密鑰髓迎。

4.服務(wù)器可以使用其專用密鑰對(duì)消息進(jìn)行解密峦朗,然后恢復(fù)會(huì)話密鑰。

握手之后排龄,即表示客戶端已驗(yàn)證了 Web 站點(diǎn)的身份波势,并且只有該客戶端和 Web 服務(wù)器擁有會(huì)話密鑰副本。從現(xiàn)在開(kāi)始橄维,客戶機(jī)和服務(wù)器便可以使用該會(huì)話密鑰對(duì)彼此間的所有通信進(jìn)行加密尺铣。這樣就確保了客戶機(jī)和服務(wù)器之間的通信的安全性。

上面是一般也是應(yīng)用最普遍的單向驗(yàn)證方式争舞,由瀏覽器(客戶端)來(lái)驗(yàn)證服務(wù)端的合法性凛忿;其實(shí)也可以做雙向驗(yàn)證,服務(wù)器也可以驗(yàn)證瀏覽器(客戶端)的合法性竞川,不過(guò)一般使用在銀行業(yè)務(wù)上店溢,比如U盾之類。我們現(xiàn)在關(guān)注普遍的單向驗(yàn)證方式的應(yīng)用委乌。

數(shù)字證書(shū)與公鑰基礎(chǔ)設(shè)施

剛才已經(jīng)了解到HTTPS是基于公鑰加密法床牧,而公鑰基礎(chǔ)設(shè)施(PKI)就是一種遵循標(biāo)準(zhǔn)的利用公鑰加密技術(shù)為電子商務(wù)的開(kāi)展提供一套安全基礎(chǔ)平臺(tái)的技術(shù)和規(guī)范。完整的PKI系統(tǒng)擁有權(quán)威認(rèn)證機(jī)構(gòu)(CA)福澡、數(shù)字證書(shū)庫(kù)叠赦、密鑰備份及恢復(fù)系統(tǒng)、證書(shū)作廢系統(tǒng)革砸、應(yīng)用接口(API)等基本構(gòu)成部分除秀,其中權(quán)威認(rèn)證機(jī)構(gòu)CA將是我們需要打交道的部門。

該系統(tǒng)的邏輯關(guān)系可以這樣理解:

1算利、申請(qǐng)人向CA提交申請(qǐng)材料册踩;

2、數(shù)字證書(shū)是由證書(shū)認(rèn)證機(jī)構(gòu)(CA)對(duì)證書(shū)申請(qǐng)者真實(shí)身份驗(yàn)證之后效拭,用CA的根證書(shū)對(duì)申請(qǐng)人的一些基本信息以及申請(qǐng)人的公鑰進(jìn)行簽名(相當(dāng)于加蓋發(fā)證書(shū)機(jī)構(gòu)的公章)后形成的一個(gè)數(shù)字文件暂吉。CA完成簽發(fā)證書(shū)后胖秒,會(huì)將證書(shū)發(fā)布在CA的證書(shū)庫(kù)(目錄服務(wù)器)中,任何人都可以查詢和下載慕的,因此數(shù)字證書(shū)和公鑰一樣是公開(kāi)的阎肝。

3、每個(gè)證書(shū)持有人都有一對(duì)公鑰和私鑰肮街,這兩把密鑰可以互為加解密风题。公鑰是公開(kāi)的,不需要保密嫉父,而私鑰是由證書(shū)持有人自己持有沛硅,并且必須妥善保管和注意保密。

簡(jiǎn)單地說(shuō)绕辖,數(shù)字證書(shū)就是經(jīng)過(guò)CA認(rèn)證過(guò)的公鑰摇肌,而私鑰一般情況都是由證書(shū)持有者在自己本地生成的,由證書(shū)持有者自己負(fù)責(zé)保管仪际。

至此围小,邏輯鏈條就和SSL/TLS協(xié)議運(yùn)行機(jī)制銜接上了:申請(qǐng)人事先通過(guò)向CA申請(qǐng),已經(jīng)有了公鑰和私鑰树碱》宰ィ客戶端向服務(wù)器請(qǐng)求,能夠得到包含公鑰的數(shù)字證書(shū)赴恨。得到公鑰后,雙方就按照上節(jié)中運(yùn)行的基本流程生成對(duì)話密鑰伴栓,而后開(kāi)始加密通信伦连。

如何驗(yàn)證數(shù)字證書(shū)是由CA簽發(fā)而非偽造的,請(qǐng)移步:iOS安全系列之一:HTTPS

搭建一個(gè)HTTPS服務(wù)器钳垮。根據(jù)網(wǎng)絡(luò)上的資料惑淳,可知有兩種方式來(lái)搭建HTTPS服務(wù)器:

一種是創(chuàng)建證書(shū)請(qǐng)求,然后到權(quán)威機(jī)構(gòu)認(rèn)證饺窿,隨之配置到服務(wù)器歧焦;

一種是自建證書(shū),然后配置給服務(wù)器肚医。

第一種方式搭建的HTTPS服務(wù)器是最優(yōu)的绢馍。建立網(wǎng)站的話,直接就會(huì)被信任肠套。而服務(wù)器作為移動(dòng)端app的服務(wù)器時(shí)舰涌,也不需要為ATS做過(guò)多的適配。雖然說(shuō)權(quán)威的機(jī)構(gòu)認(rèn)證都是需要錢的你稚,但是如今也不乏存在免費(fèi)的第三方認(rèn)證機(jī)構(gòu)瓷耙;

第二種方式搭建的HTTPS服務(wù)器朱躺,對(duì)于網(wǎng)站來(lái)說(shuō)完全不可行,用戶打開(kāi)時(shí)直接彈出一個(gè)警告提醒搁痛,說(shuō)這是一個(gè)不受信任的網(wǎng)站长搀,讓用戶是否繼續(xù),體驗(yàn)很差鸡典,而且讓用戶感覺(jué)網(wǎng)站不安全源请。對(duì)于移動(dòng)端來(lái)說(shuō),在iOS9出現(xiàn)之前轿钠,這個(gè)沒(méi)什么問(wèn)題巢钓,但是在iOS9出來(lái)之后,第二種方式是通不過(guò)ATS特性疗垛,需要在info.plist文件中將App Transport Security Settings中的Allow Arbitrary Loads設(shè)置為YES才行症汹。

參考文章:

iOS開(kāi)發(fā)中的HTTPS

打造安全的App!iOS安全系列之 HTTPS

iOS應(yīng)用網(wǎng)絡(luò)安全之HTTPS

最后編輯于
?著作權(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)店門瀑梗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(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)容