理解 HTTPS

前言

HTTP 是基于 TCP/IP 協(xié)議的應(yīng)用層協(xié)議接剩。它不涉及數(shù)據(jù)包(packet)傳輸谣拣,主要規(guī)定了客戶端和服務(wù)器之間的通信格式杠袱,默認(rèn)使用80端口辐怕。但是傳輸?shù)倪^程是通過明文來傳輸铲觉。帶來了三大風(fēng)險

  1. 竊聽風(fēng)險(eavesdropping):第三方可以獲知通信內(nèi)容澈蝙。
  2. 篡改風(fēng)險(tampering):第三方可以修改通信內(nèi)容。
  3. 冒充風(fēng)險(pretending):第三方可以冒充他人身份參與通信撵幽。

在安全問題日益突出的情況下灯荧,互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織 ISOC 基于 HTTP 協(xié)議通信推出了 SSL/TLS 協(xié)議 也就是 HTTPS , HTTPS 協(xié)議具有

  1. 所有信息都是加密傳播盐杂,第三方無法竊聽逗载。
  2. 具有校驗機(jī)制,一旦被篡改链烈,通信雙方會立刻發(fā)現(xiàn)厉斟。
  3. 配備身份證書,防止身份被冒充强衡。

數(shù)字證書

數(shù)字證書:該證書包含了公鑰等信息捏膨,一般是由服務(wù)器發(fā)給客戶端,接收方通過驗證這個證書是不是由信賴的CA簽發(fā),或者與本地的證書相對比号涯,來判斷證書是否可信目胡;假如需要雙向驗證,則服務(wù)器和客戶端都需要發(fā)送數(shù)字證書給對方驗證链快;

發(fā)展歷史

1994年誉己,NetScape公司設(shè)計了SSL協(xié)議(Secure Sockets Layer)的1.0版,但是未發(fā)布域蜗。
1995年巨双,NetScape公司發(fā)布SSL 2.0版,很快發(fā)現(xiàn)有嚴(yán)重漏洞霉祸。
1996年筑累,SSL 3.0版問世,得到大規(guī)模應(yīng)用丝蹭。
1999年慢宗,互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織ISOC接替NetScape公司,發(fā)布了SSL的升級版TLS 1.0版奔穿。
2006年和2008年镜沽,TLS進(jìn)行了兩次升級,分別為TLS 1.1版和TLS 1.2版贱田。最新的變動是2011年TLS 1.2的修訂版缅茉。

目前,應(yīng)用最廣泛的是TLS 1.0男摧,接下來是SSL 3.0蔬墩。但是,主流瀏覽器都已經(jīng)實現(xiàn)了TLS 1.2的支持耗拓。
TLS 1.0通常被標(biāo)示為SSL 3.1拇颅,TLS 1.1為SSL 3.2,TLS 1.2為SSL 3.3帆离。

通信原理

握手階段分為 4 個步驟

1、客戶端發(fā)起請求 (ClientHello)

客戶端向服務(wù)器提供

  1. 支持的協(xié)議版本结澄,比如TLS 1.0版哥谷。
  2. 一個客戶端生成的隨機(jī)數(shù),稍后用于生成"對話密鑰"麻献。
  3. 支持的加密方法们妥,比如RSA公鑰加密。
  4. 支持的壓縮方法勉吻。

2监婶、服務(wù)器回應(yīng) (SeverHello)

服務(wù)器收到 ClientHello, 并作出回應(yīng)。此時服務(wù)器向客戶端發(fā)送

  1. 確認(rèn)使用的加密通信協(xié)議版本惑惶,比如TLS 1.0版本煮盼。如果瀏覽器與服務(wù)器支持的版本不一致,服務(wù)器關(guān)閉加密通信带污。
  2. 一個服務(wù)器生成的隨機(jī)數(shù)僵控,稍后用于生成"對話密鑰"。
  3. 確認(rèn)使用的加密方法鱼冀,比如RSA公鑰加密报破。
  4. 服務(wù)器證書。

3千绪、客戶端回應(yīng)

客戶端收到服務(wù)器回應(yīng)以后充易,首先驗證服務(wù)器證書。如果證書不是可信機(jī)構(gòu)頒布荸型、或者證書中的域名與實際域名不一致盹靴、或者證書已經(jīng)過期,由其選擇是否還要繼續(xù)通信帆疟。
驗證通過之后客戶端會向服務(wù)端發(fā)送

  1. 一個隨機(jī)數(shù)(pre-master key)鹉究。該隨機(jī)數(shù)用服務(wù)器公鑰加密,防止被竊聽(服務(wù)器可以通過私鑰來解密出公鑰加密的內(nèi)容)踪宠。
  2. 編碼改變通知自赔,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送。
  3. 客戶端握手結(jié)束通知柳琢,表示客戶端的握手階段已經(jīng)結(jié)束绍妨。這一項同時也是前面發(fā)送的所有內(nèi)容的hash值,用來供服務(wù)器校驗柬脸。

4他去、服務(wù)器最后回應(yīng)

服務(wù)器收到客戶端的第三個隨機(jī)數(shù)pre-master key之后,根據(jù)之前的 2 個隨機(jī)數(shù)(ClientHello 和 SeverHello 階段)計算生成本次會話所用的"會話密鑰"倒堕。然后灾测,向客戶端最后發(fā)送下面信息。

  1. 編碼改變通知垦巴,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送媳搪。
  2. 服務(wù)器握手結(jié)束通知,表示服務(wù)器的握手階段已經(jīng)結(jié)束骤宣。這一項同時也是前面發(fā)送的所有內(nèi)容的hash值秦爆,用來供客戶端校驗。

傳輸過程

在結(jié)束上面4次握手通信之后憔披,客戶端和服務(wù)端就可以進(jìn)入安全的傳輸過程等限。使用普通的HTTP協(xié)議爸吮,只不過用"會話密鑰"加密解密內(nèi)容。

iOS 中關(guān)于 HTTPS 的驗證

iOS 關(guān)于 HTTPS 驗證的 API 在 Security.Framework 框架中, 在使用 NSURLSession 時

在正規(guī)的 CA 機(jī)構(gòu)申請證書的情況下:

(1) 在回調(diào)

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
                            didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge 
                              completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler;

中我們會收到系統(tǒng)的鑒定請求望门。獲取需要驗證的信任對象(Trust Object)challenge.protectionSpace.serverTrust

(2) 使用系統(tǒng)默認(rèn)驗證方式驗證Trust Object形娇。SecTrustEvaluate 方法會根據(jù)Trust Object的驗證策略,一級一級往上怒允,驗證證書鏈上每一級數(shù)字簽名的有效性埂软,從而評估證書的有效性。

(3) 第二步驗證通過纫事,就可以直接驗證通過勘畔,進(jìn)入到下一步:使用Trust Object生成一份憑證([NSURLCredential credentialForTrust:serverTrust]),調(diào)用 completionHandler(disposition, credential) 來完成鑒勸過程丽惶。

自生成證書的情況下:
需要在第二步之前炫七,調(diào)用SecTrustSetAnchorCertificates來注冊自己的證書到系統(tǒng)信任列表中,在進(jìn)行上面的第二部過程即可完成校驗钾唬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末万哪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抡秆,更是在濱河造成了極大的恐慌奕巍,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儒士,死亡現(xiàn)場離奇詭異的止,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)着撩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門诅福,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拖叙,你說我怎么就攤上這事氓润。” “怎么了薯鳍?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵咖气,是天一觀的道長。 經(jīng)常有香客問我挖滤,道長崩溪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任壶辜,我火速辦了婚禮悯舟,結(jié)果婚禮上担租,老公的妹妹穿的比我還像新娘砸民。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布岭参。 她就那樣靜靜地躺著反惕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪演侯。 梳的紋絲不亂的頭發(fā)上姿染,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音秒际,去河邊找鬼悬赏。 笑死,一個胖子當(dāng)著我的面吹牛娄徊,可吹牛的內(nèi)容都是我干的闽颇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼寄锐,長吁一口氣:“原來是場噩夢啊……” “哼兵多!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橄仆,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤剩膘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盆顾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怠褐,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年椎扬,在試婚紗的時候發(fā)現(xiàn)自己被綠了惫搏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚕涤,死狀恐怖筐赔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揖铜,我是刑警寧澤茴丰,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站天吓,受9級特大地震影響贿肩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜龄寞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一汰规、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧物邑,春花似錦溜哮、人聲如沸滔金。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽餐茵。三九已至,卻和暖如春述吸,著一層夾襖步出監(jiān)牢的瞬間忿族,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工蝌矛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留道批,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓入撒,卻偏偏與公主長得像屹徘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子衅金,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

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