我們?yōu)槭裁匆?HTTPS

前言

講 HTTPS 之前,我們先來回顧一下 HTTP 協(xié)議崭放。HTTP 是一種超文本傳輸協(xié)議哨苛,它是無狀態(tài)的、簡(jiǎn)單快速的币砂、基于 TCP 的可靠傳輸協(xié)議建峭。

既然 HTTP 協(xié)議這么好,那怎么有冒出來了一個(gè) HTTPS 呢决摧?主要是因?yàn)?HTTP 是明文傳輸?shù)囊谡簦@就造成了很大的安全隱患。在網(wǎng)絡(luò)傳輸過程中掌桩,只要數(shù)據(jù)包被人劫持边锁,那你就相當(dāng)于赤身全裸的暴露在他人面前,毫無半點(diǎn)隱私可言波岛。想象一下茅坛,如果你連了一個(gè)不可信的 WIFI,正好有使用了某個(gè)支付軟件進(jìn)行了支付操作则拷,那么你的密碼可能就到別人手里去了贡蓖,后果可想而知。

網(wǎng)絡(luò)環(huán)境的就是這樣煌茬,給你帶來便利的同時(shí)斥铺,也到處充滿了挑戰(zhàn)與風(fēng)險(xiǎn)。對(duì)于小白用戶坛善,你不能期望他有多高的網(wǎng)絡(luò)安全意識(shí)晾蜘,產(chǎn)品應(yīng)該通過技術(shù)手段,讓自己變得更安全眠屎,從源頭來控制風(fēng)險(xiǎn)剔交。這就誕生了 HTTPS 協(xié)議。

HTTPS

簡(jiǎn)單理解改衩,HTTP 不就是因?yàn)槊魑膫鬏斸#栽斐闪税踩[患。那讓數(shù)據(jù)傳輸以加密的方式進(jìn)行燎字,不就消除了該隱患腥椒。

從網(wǎng)絡(luò)的七層模型來看,原先的四層 TCP 到七層 HTTP 之間是明文傳輸候衍,在這之間加一個(gè)負(fù)責(zé)數(shù)據(jù)加解密的傳輸層(SSL/TLS)笼蛛,保證在網(wǎng)絡(luò)傳輸?shù)倪^程中數(shù)據(jù)是加密的,而 HTTP 接收到的依然是明文數(shù)據(jù)蛉鹿,不會(huì)有任何影響滨砍。

[圖片上傳失敗...(image-1f4ad-1513224051213)]

<font color="grey">SSL是Netscape開發(fā)的專門用戶保護(hù)Web通訊的,目前版本為3.0妖异。最新版本的TLS 1.0是IETF(工程任務(wù)組)制定的一種新的協(xié)議惋戏,它建立在SSL 3.0協(xié)議規(guī)范之上,是SSL 3.0的后續(xù)版本他膳。兩者差別極小响逢,可以理解為SSL 3.1,它是寫入了RFC的棕孙。</font>

優(yōu)勢(shì)

<font color="grey">本節(jié)參考阮一峰的SSL/TLS協(xié)議運(yùn)行機(jī)制的概述舔亭。</font>

在看實(shí)現(xiàn)細(xì)節(jié)之前,我們先看一下 HTTP 具體的安全隱患蟀俊,以及 HTTPS 的解決方案钦铺。

HTTP 三大風(fēng)險(xiǎn)

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

HTTPS 解決方案

  1. 所有信息都是加密傳播,第三方無法竊聽烫映。
  2. 具有校驗(yàn)機(jī)制沼本,一旦被篡改,通信雙方會(huì)立刻發(fā)現(xiàn)窑邦。
  3. 配備身份證書擅威,防止身份被冒充。

實(shí)現(xiàn)

通過上面的介紹冈钦,對(duì) HTTPS 有了大致的了解郊丛。可本質(zhì)問題還沒說瞧筛,HTTPS 是如何做到數(shù)據(jù)的加密傳輸厉熟?這兒不打算搬出復(fù)雜的算法公式,還是以最通俗的話述來講講我的理解较幌。

首先揍瑟,先來了解下加密算法的方式,常用的有兩種:對(duì)稱加密與非對(duì)稱加密乍炉。

  • 對(duì)稱加密:即通信雙方通過相同的密鑰進(jìn)行信息的加解密绢片。加解密速度快滤馍,但是安全性較差,如果其中一方泄露了密鑰底循,那加密過程就會(huì)被人破解巢株。

  • 非對(duì)稱加密:相比對(duì)稱加密,它一般有公鑰和私鑰熙涤。公鑰負(fù)責(zé)信息加密阁苞,私鑰負(fù)責(zé)信息解密。兩把密鑰分別由發(fā)送雙發(fā)各自保管祠挫,加解密過程需兩把密鑰共同完成那槽。安全性更高,但同時(shí)計(jì)算量也比對(duì)稱加密要大很多等舔。

對(duì)于網(wǎng)絡(luò)通信過程骚灸,在安全的前提下,還是需要保證響應(yīng)速度慌植。如何每次都進(jìn)行非對(duì)稱計(jì)算逢唤,通信過程勢(shì)必會(huì)受影響。所以涤浇,人們希望的安全傳輸鳖藕,最終肯定是以對(duì)稱加密的方式進(jìn)行。如圖:

[圖片上傳失敗...(image-4364d7-1513224051213)]

首先 Session Key 是如何得到的只锭,并且在 Session Key 之前的傳輸都是明文的著恩。Session Key 通過網(wǎng)絡(luò)傳輸肯定不安全,所以它一定各自加密生成的蜻展。因此在這之前喉誊,雙方還要互通,確認(rèn)加密的算法纵顾,并且各自添加隨機(jī)數(shù)伍茄,提高安全性。如圖:

[圖片上傳失敗...(image-1655f-1513224051213)]

這樣雙方確認(rèn)了使用的 SSL/TLS 版本施逾,以及生成 Session Key 的加密算法敷矫。并且雙方擁有了2個(gè)隨機(jī)數(shù)(客戶端、服務(wù)端各自生成一個(gè))汉额〔苷蹋可是如果按照目前的隨機(jī)參數(shù),加上加密算法生成 Session Key 呢蠕搜,還是存在風(fēng)險(xiǎn)怎茫,加密算法是有限固定的,而且隨機(jī)數(shù)都是明文傳輸?shù)募斯啵斜唤孬@的可能轨蛤。

讓加密算法變得不可預(yù)測(cè)蜜宪,可能性不大。那么能否再傳輸一個(gè)加密的隨機(jī)數(shù)祥山,這個(gè)隨機(jī)數(shù)就算被截獲端壳,也無法破譯。這就用到了非對(duì)稱加密算法枪蘑,我們?cè)诓襟E二中,把公鑰傳輸給客戶端岖免。這樣客戶端的第三個(gè)隨機(jī)數(shù)用公鑰加密岳颇,只有擁有私鑰的服務(wù)端才能破譯第三個(gè)參數(shù),這樣生成的 Session 就是安全的了颅湘。如圖:

[圖片上傳失敗...(image-eaf419-1513224051213)]

不容易啊话侧,看似完成了。現(xiàn)在生成的 Session Key 是不可預(yù)測(cè)的(就算被截獲也無所謂)闯参,我們可以放心的進(jìn)行私密通信了瞻鹏。真的是這樣嗎?我們似乎對(duì)服務(wù)端給的公鑰十分信任鹿寨,如果你目前通信的本身就不可信新博,或者被中間人劫持,由它發(fā)送偽造的公鑰給你脚草,那后果可想而知赫悄,這就是傳說中的“中間人攻擊”。

所以馏慨,我們得包裝一下公鑰埂淮,讓它變得安全。這就引出了數(shù)字證書的概念写隶,數(shù)字證書由受信任的證書機(jī)構(gòu)頒發(fā)倔撞,證書包含證書文件與證書私鑰文件。私鑰文件由服務(wù)端自己保存慕趴,證書文件發(fā)送給請(qǐng)求的客戶端痪蝇,文件包含了域名信息、公鑰以及相應(yīng)的校驗(yàn)碼冕房∨常客戶可以根據(jù)得到的證書文件,校驗(yàn)證書是否可信毒费。如圖:

[圖片上傳失敗...(image-abda42-1513224051213)]

這下算簡(jiǎn)單講完了整個(gè)的通信過程丙唧,首先在 TCP 三次握手后,進(jìn)行非對(duì)稱算法的加密(校驗(yàn)證書)觅玻,將得到的參數(shù)進(jìn)行加密生成會(huì)話所需的 Session Key想际,在之后的數(shù)據(jù)傳輸中培漏,通過 Session Key 進(jìn)行對(duì)稱密碼傳輸,會(huì)話信息在私密的通道下完成胡本。

當(dāng)然牌柄,實(shí)際的過程遠(yuǎn)比這來的復(fù)雜,這中間包括了復(fù)雜的算法以及細(xì)節(jié)內(nèi)容侧甫,有興趣的同學(xué)珊佣,可查閱相關(guān)的資料進(jìn)行了解。

證書

關(guān)于數(shù)字證書披粟,下面簡(jiǎn)單介紹一下證書的一些類別:

按驗(yàn)證級(jí)別分類

  • Domain Validation(DV):最基本的驗(yàn)證方式咒锻,只保證訪問的域名是安全的。但在證書中不會(huì)提及任何公司/組織信息守屉,所以這算是最低級(jí)別的驗(yàn)證惑艇。

示例:https://robowhois.com

[圖片上傳失敗...(image-3b3829-1513224051213)]

  • Organization Validation(OV):這一級(jí)別的證書解決了上面域名與公司無法對(duì)應(yīng)的問題,該證書中會(huì)描述公司/組織的相關(guān)信息拇泛。確保域名安全的同時(shí)滨巴,也保證了域名與公司的綁定關(guān)系。

示例:https://www.baidu.com

[圖片上傳失敗...(image-e2ecb1-1513224051213)]

  • Extended Validation(EV):該級(jí)別的證書具有最高的安全性俺叭,也是最值得信任的恭取。它除了給出更詳細(xì)的公司/組織信息外,還在瀏覽器的地址欄上直接給出了公司名稱熄守。

示例:https://www.github.com

[圖片上傳失敗...(image-ba0708-1513224051213)]
[圖片上傳失敗...(image-b7eb74-1513224051213)]

按覆蓋級(jí)別分類

  • 單域名 SSL 證書:這類證書只能針對(duì)一個(gè)域名使用秽荤,如,當(dāng)證書與 yourdomain.com 配對(duì)了柠横,那就不能在用在 sub.yourdomain.com 上了窃款。
  • 通配符域名 SSL 證書:這類證書可以覆蓋某個(gè)域名下的所有子域名。如牍氛,當(dāng)證書與 yourdomain.com 配對(duì)了晨继,那默認(rèn) sub.yourdomain.com 以及其他子域名都加入了安全驗(yàn)證。
  • 多多域名 SSL 證書:這類證書可以使用在多個(gè)不同的域名上搬俊。如紊扬,域名 a.com 與 b.com 上可以配對(duì)同一個(gè)證書。

從 HTTP 遷移的注意點(diǎn)

  • 首先需要從相關(guān)的網(wǎng)站申請(qǐng)需要的證書唉擂;
  • 在服務(wù)器上開放 HTTPS 所需的443端口餐屎,并設(shè)置相應(yīng)的證書地址,下面貼一段在 nginx 上的配置:
server {
    listen 443;
    server_name localhost;
    ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   cert/證書文件.pem;
    ssl_certificate_key  cert/證書私鑰.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}
  • 對(duì)于原先的80端口玩祟,需做重定向的跳轉(zhuǎn)腹缩。將原先訪問 HTTP 協(xié)議的用戶,自動(dòng)跳轉(zhuǎn)用 HTTPS 上來。

  • 出于性能考慮藏鹊,Session Key 的生成相對(duì)耗 CPU 的資源润讥,所以盡量減少 Key 的生成次數(shù)。這里有兩種方案:

    • 采用長連接方式盘寡;
    • 在回話創(chuàng)建時(shí)楚殿,對(duì)生成的 Session Key 進(jìn)行緩存(仍以 nginx 為例);
    http {
        #配置共享會(huì)話緩存大小
        ssl_session_cache   shared:SSL:10m;
        #配置會(huì)話超時(shí)時(shí)間
        ssl_session_timeout 10m;
        ...
    

總結(jié)

本文不涉及任何高深的概念竿痰,都是以自己的一些理解來進(jìn)行講述脆粥,希望對(duì)大家有用!

最后影涉,推薦一個(gè)比較好用的 HTTP 抓包工具(含 HTTPS)变隔。


原文:https://github.com/jasonGeng88/blog

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市常潮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楷力,老刑警劉巖喊式,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異萧朝,居然都是意外死亡岔留,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門检柬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來献联,“玉大人,你說我怎么就攤上這事何址±锬妫” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵用爪,是天一觀的道長原押。 經(jīng)常有香客問我,道長偎血,這世上最難降的妖魔是什么诸衔? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮颇玷,結(jié)果婚禮上笨农,老公的妹妹穿的比我還像新娘。我一直安慰自己帖渠,他們只是感情好谒亦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般诊霹。 火紅的嫁衣襯著肌膚如雪羞延。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天脾还,我揣著相機(jī)與錄音伴箩,去河邊找鬼。 笑死鄙漏,一個(gè)胖子當(dāng)著我的面吹牛嗤谚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怔蚌,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼巩步,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了桦踊?” 一聲冷哼從身側(cè)響起椅野,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎籍胯,沒想到半個(gè)月后竟闪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杖狼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年炼蛤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝶涩。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡理朋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绿聘,到底是詐尸還是另有隱情嗽上,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布熄攘,位于F島的核電站炸裆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鲜屏。R本人自食惡果不足惜烹看,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洛史。 院中可真熱鬧惯殊,春花似錦、人聲如沸也殖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至己儒,卻和暖如春崎岂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闪湾。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工冲甘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人途样。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓江醇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親何暇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陶夜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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