Https建立安全傳輸原理

前言

http和https對于web developers來說肯定都不陌生醉锄,甚至是每天都在接觸承二,然而在我接觸的一些相關(guān)群體中(包括我自己),能準確說出http協(xié)議的各種頭字段的含義妆够、緩存原理负蚊,https建立安全連接過程的人很少。本文是我對最近學(xué)習(xí)的https知識點的一些整理鸵荠。

關(guān)于HTTPS

HTTPS = HTTP+SSL/TLS(TLS是SSL的升級版)伤极, 即 HTTP 下加入 SSL 層進行通信加密哨坪,不經(jīng)過SSL協(xié)議加密的HTTP通訊有以下幾個問題:

  • 竊聽風(fēng)險(eavesdropping):第三方可以獲知通信內(nèi)容。
  • 篡改風(fēng)險(tampering):第三方可以修改通信內(nèi)容届慈。
  • 冒充風(fēng)險(pretending):第三方可以冒充他人身份參與通信。

SSL/TLS協(xié)議是為了解決這三大風(fēng)險而設(shè)計的臊泌,希望達到:

  • 所有信息都是加密傳播揍拆,第三方無法竊聽。
  • 具有校驗機制高氮,一旦被篡改顷牌,通信雙方會立刻發(fā)現(xiàn)塞淹。
  • 配備身份證書饱普,防止身份被冒充。

HTTPS如何保證通信的安全性

首先講下HTTP在通信過程谁帕,直接是明文傳輸冯袍,就像這樣:


0.jpg

很明顯, 你不想你的銀行卡密碼這么輕易的被黑客獲取吧儡循?于是想到對內(nèi)容進行加密征冷,客戶端和服務(wù)端約定一種加密算法就行了检激,就像這樣:


1.jpg

上面的加密方式中,通信雙方使用同一種加密算法和密鑰齿穗,這種加密方式稱為對稱加密今穿,典型的對稱加密算法有:DES、RC5腮出、IDEA(分組加密),RC4(序列加密)

ok作儿,現(xiàn)在乍看之下馋劈,內(nèi)容加密之后銀行卡密碼沒有暴露了妓雾,但是僅僅是這樣還是有問題:試想,如果所有的客戶端都使用同一種加密算法妒蛇,那還加個毛線密肛宋?這種此地?zé)o銀三百兩的做法毫無實際意義。但是聰明的你很快也能想到欢揖,每個客戶端都使用不同的加密算法吧陶耍!就像這樣:


3.jpg

現(xiàn)在只要讓客戶端和服務(wù)器協(xié)議雙方要用的加密算法就行了烈钞,就像這樣:


4.jpg

嗯棵磷,好像還不錯晋涣,但是客戶端和服務(wù)器協(xié)商要用什么加密算法這條通信本身是沒有加密的呀谢鹊?還是存在被攔截并被破解密文的可能性。ok佃扼,現(xiàn)在需要對協(xié)商加密算法這條信息進行加密了兼耀,這里需要用到另一種加密方式了求冷,我們稱之為“非對稱加密”:

非對稱加密需要兩個密鑰來進行加密和解密窍霞,這兩個秘鑰是公開密鑰(public key但金,簡稱公鑰)和私有密鑰(private key,簡稱私鑰)钱磅。私鑰加密后的密文似枕,只要是公鑰,都可以解密禁舷,但是反過來公鑰加密后的密文毅往,只有私鑰可以解密派近。私鑰只有一個人有渴丸,而公鑰可以發(fā)給所有的人。典型的算法有RSA戒幔,DSA土童,DH。

服務(wù)器和各個客戶端的關(guān)系就像這樣:


5.jpg

服務(wù)器擁有一把私鑰敢订,每個客戶端在與服務(wù)器連接時罢吃,服務(wù)器會返回給客戶端一把公鑰尿招,客戶端通過自己手中的公鑰加密后的密文阱驾,只有擁有私鑰的服務(wù)器才能破解怪蔑,所以此時需要客戶端決定此后雙方通信需要用到的對稱加密算法饮睬,并用公鑰進行加密后發(fā)送給服務(wù)器,協(xié)定好之后捆愁,雙方就使用對稱加密算法進行加密通信了昼丑。上述的過程大致如下圖所示:


6.jpg

現(xiàn)在菩帝,通信時的加密過程已經(jīng)差不多完美了,但是細心的人可能會發(fā)出疑問:一開始的公鑰是服務(wù)器分發(fā)給各個客戶端的宜雀,那如何保證分發(fā)的過程中公鑰不被黑客劫持并偽造自己的公鑰給客戶端呢握础?就像這樣:


7.jpg

這里就需要權(quán)威的機構(gòu)進行認證了:CA機構(gòu)數(shù)字證書(需要花錢購買的)禀综。

數(shù)字證書如何工作

CA證書包含以下內(nèi)容:

  • 證書頒發(fā)機構(gòu)的名稱
  • 證書的有效期
  • 公鑰
  • 證書所有者(Subject)
  • 證書本身的數(shù)字簽名
  • 指紋以及指紋算法
一、驗證證書的有效性

瀏覽器默認都會內(nèi)置CA根證書孤澎,其中根證書包含了CA的公鑰欠窒。

  • 證書頒發(fā)的機構(gòu)是偽造的:瀏覽器不認識,直接認為是危險證書姐扮;
  • 證書頒發(fā)的機構(gòu)是確實存在的衣吠,于是根據(jù)CA名缚俏,找到對應(yīng)內(nèi)置的CA根證書贮乳、CA的公鑰恬惯。用CA的公鑰酪耳,對偽造的證書的摘要進行解密,發(fā)現(xiàn)解不了碗暗,認為是危險證書言疗;
  • 對于篡改的證書,使用CA的公鑰對數(shù)字簽名進行解密得到摘要A,然后再根據(jù)簽名的Hash算法計算出證書的摘要B死姚,對比A與B勤篮,若相等則正常,若不相等則是被篡改過的温鸽;
  • 證書可在其過期前被吊銷手负,通常情況是該證書的私鑰已經(jīng)失密竟终。較新的瀏覽器如Chrome切蟋、Firefox、Opera和Internet Explorer都實現(xiàn)了在線證書狀態(tài)協(xié)議(OCSP)以排除這種情形:瀏覽器將網(wǎng)站提供的證書的序列號通過OCSP發(fā)送給證書頒發(fā)機構(gòu)喘鸟,后者會告訴瀏覽器證書是否還是有效的驻右。

里面涉及到一些比較重要的概念堪夭,比如數(shù)字簽名拣凹,這里需要大致解釋下什么是數(shù)字簽名:

數(shù)字簽名技術(shù)就是對“非對稱密鑰加解密”和“數(shù)字摘要“兩項技術(shù)的應(yīng)用恨豁,它將摘要信息用發(fā)送者的私鑰加密橘蜜,與原文一起傳送給接收者。接收者只有用發(fā)送者的公鑰才能解密被加密的摘要信息跌捆,然后用HASH函數(shù)對收到的原文產(chǎn)生一個摘要信息棒搜,與解密的摘要信息對比。如果相同可款,則說明收到的信息是完整的克蚂,在傳輸過程中沒有被修改埃叭,否則說明信息被修改過,因此數(shù)字簽名能夠驗證信息的完整性立镶。

簡單說类早,數(shù)字簽名有兩種功效:

  • 能確定消息確實是由發(fā)送方簽名并發(fā)出來的涩僻,因為別人假冒不了發(fā)送方的簽名。
  • 數(shù)字簽名能確定消息的完整性逆日。

關(guān)于數(shù)字簽名室抽,可以看看阮一峰翻譯過的一篇文章,寫得很通俗易懂:數(shù)字簽名是什么噩死。

注意:數(shù)字簽名只能驗證數(shù)據(jù)的完整性,數(shù)據(jù)本身是否加密不屬于數(shù)字簽名的控制范圍


安全地獲取公鑰

如上述行嗤,數(shù)字證書在HTTPS通信過程中扮演身份認證和密鑰分發(fā)的功能栅屏,我們可以簡單模擬一下客戶端與服務(wù)器之間信息交換的過程:

  1. 客戶端:hello堂鲜,我要跟你(xxx.com)進行數(shù)據(jù)通信;
  2. 服務(wù)器:好的,我就是xxx.com哥纫,這是我的證書痴奏,里面有我的名字和公鑰等各種信息读拆,你驗證下。
  3. 客戶端:(查看證書上的信息是否有誤暑诸,并根據(jù)上述驗證方法驗證證書的有效性辟灰,如果有問題芥喇,發(fā)出警告并斷開連接),Di*6D&T^@BD#H75dJ (公鑰加密后的內(nèi)容,翻譯:我們用DES和RSA加密算法進行之后的通信)
  4. 服務(wù)器:7HUW&@O#DD#G@B(對稱加密后的內(nèi)容湿诊,不翻譯了)
  5. 客戶端:UDW@J@DH&76589DHUD(對稱加密后的內(nèi)容)

至此瘦材,整個HTTPS的安全通信過程已經(jīng)大致講完了,當(dāng)然朗和,還有很多細節(jié)值得深挖眶拉,比如SSL協(xié)議的握手過程等,有時間再做更細致的整理放可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朝刊,一起剝皮案震驚了整個濱河市拾氓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌房官,老刑警劉巖奶陈,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃粒,死亡現(xiàn)場離奇詭異徐勃,居然都是意外死亡,警方通過查閱死者的電腦和手機肖爵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門劝堪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揉稚,你說我怎么就攤上這事秒啦。” “怎么了搀玖?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵余境,是天一觀的道長。 經(jīng)常有香客問我,道長芳来,這世上最難降的妖魔是什么含末? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮即舌,結(jié)果婚禮上佣盒,老公的妹妹穿的比我還像新娘侥涵。我一直安慰自己沼撕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布芜飘。 她就那樣靜靜地躺著务豺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗦明。 梳的紋絲不亂的頭發(fā)上笼沥,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音娶牌,去河邊找鬼奔浅。 笑死,一個胖子當(dāng)著我的面吹牛诗良,可吹牛的內(nèi)容都是我干的汹桦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼鉴裹,長吁一口氣:“原來是場噩夢啊……” “哼舞骆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起径荔,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤督禽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后总处,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狈惫,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年鹦马,在試婚紗的時候發(fā)現(xiàn)自己被綠了胧谈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡荸频,死狀恐怖第岖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情试溯,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布郊酒,位于F島的核電站遇绞,受9級特大地震影響键袱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摹闽,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一蹄咖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧付鹿,春花似錦澜汤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坐梯,卻和暖如春徽诲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吵血。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工谎替, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹋辅。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓钱贯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侦另。 傳聞我的和親對象是個殘疾皇子秩命,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

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

  • 數(shù)字證書原理 - 無恙 - 博客園 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念,然后通過一個加密通信過程的例子說明...
    拉肚閱讀 1,659評論 0 3
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念淋肾,然后通過一個加密通信過程的例子說明了加密算法的作用硫麻,以及數(shù)字證書的出現(xiàn)...
    已認證用戶閱讀 3,830評論 1 4
  • 前言 文中首先解釋加密解密的一些基礎(chǔ)知識和概念拿愧,然后通過一個加密通信過程的例子說明了加密算法的作用,以及數(shù)字證書的...
    sunny沖哥閱讀 2,982評論 0 2
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念碌尔,然后通過一個加密通信過程的例子說明了加密算法的作用浇辜,以及數(shù)字證書的出現(xiàn)...
    納蘭三少閱讀 1,905評論 1 6
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念,然后通過一個加密通信過程的例子說明了加密算法的作用唾戚,以及數(shù)字證書的出現(xiàn)...
    梅_梅閱讀 279評論 0 0