以前我有寫過http相關的文章,在看本文前若是不瞭解http能夠先看 《5分鐘讓你明白HTTP協議》。本文主要參考內容來自 用信鴿來解釋 HTTPShtml
1.請求或響應在傳輸途中,遭攻擊者攔截並篡改內容的攻擊被稱爲中間人攻擊(Man-in-the-Middle attack,MITM)。算法
超文本傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,常稱爲HTTP over TLS,HTTP over SSL或HTTP Secure)是一種經過計算機網絡進行安全通訊的傳輸協議。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密數據包。HTTPS開發的主要目的,是提供對網站服務器的身份認證,保護交換數據的隱私與完整性。瀏覽器
HTTPS是在通訊接口部分用 TLS(Transport Layer Security 傳輸層安全性協議),TLS協議採用主從式架構模型,用於在兩個應用程序間經過網絡建立起安全的鏈接,防止在交換數據時受到竊聽及篡改。安全
HTTPS 協議的主要功能基本都依賴於 TLS/SSL 協議,TLS/SSL 的功能實現主要依賴於三類基本算法:
散列函數
、對稱加密
和非對稱加密
,其利用非對稱加密實現身份認證和密鑰協商,對稱加密算法採用協商的密鑰對數據加密,基於散列函數驗證信息的完整性。 bash
SSL/TLS協議運行機制 能夠看阮老師的SSL/TLS協議運行機制的概述服務器
RSA加密算法原理能夠看阮老師的這兩篇文章 RSA算法原理(一)、 RSA算法原理(二)網絡
密碼學是一門難以理解的學科,提及來也很抽象,而在互聯網上任何活動均可以認爲是從某臺服務器上發送和接受信息。咱們能夠假設這些消息是用信鴿來傳遞的。架構
在談以前咱們先說一下愛麗絲、鮑勃和馬洛裏。他們是普遍地代入密碼學和物理學領域的通用角色。這些名稱是爲了方便說明議題,若是句子相似「甲想發送消息給乙」,當議題變得越複雜,將越難理解及容易混亂。而在典型的協議運行中,這些人物不必定是一個「人類」,而多是一個可信賴的自動式代理人(如電腦程序)。使用這些名稱有助說明的結構,有時也會用做幽默。併發
若是愛麗絲想要給鮑勃發送一段信息,她會把信息綁在信鴿的腿上而後送往鮑勃那裏。鮑勃收到了信息,並閱讀了信息,很是完美。函數
但若是馬洛裏攔截了愛麗絲的鴿子而且篡改了信息呢?鮑勃就沒有辦法去知道愛麗絲髮出的信息在傳遞過程當中遭到了修改。
這就是 HTTP 如何運做的。看起來很可怕對吧?我是不會經過 HTTP 來發送個人銀行資信證實的,而且你也不該如此。
那麼若是愛麗絲和鮑勃都很是的機智。他們一致認同使用一種隱蔽的密碼來書寫他們的信息。他們會將信息中的每一個字母按照字母表中的順序前移三位。好比,D→A,E→B,F→C。如此一來,原文爲 「secret message」 的信息就變成了 「pbzobq jbppxdb」 。
那如今若是馬洛裏再截獲了信鴿,她既不能作出有意義的修改同時也不會知道信息的內容,由於她不知道隱蔽的密碼究竟是什麼。然而鮑勃卻能夠很容易反轉密碼,依靠 A → D, B → E, C → F 之類的規則破譯信息的內容。加密後的信息 「pbzobq jbppxdb」 會被破解還原爲 「secret message」 。
這就是對稱密匙加密
,由於若是你知道如何加密一段信息那麼你一樣能夠解密這段信息。 上述的密碼一般被稱爲凱撒碼。在現實生活中,咱們會使用更爲奇特和複雜的密碼,但原理相同。
若是除了發信者和收信者以外沒有人知道使用的是什麼密匙,對稱密匙加密是很是安全的。在凱撒加密中,密匙就是每一個字母變到加密字母須要移動多少位的偏移量。我以前的距離中,使用的偏移量是 3 ,可是也能夠用 4 或者 12 。
問題是若是愛麗絲和鮑勃在開始用信鴿傳信以前沒有碰過頭,他們沒有一個安全的方式來確立密匙。若是他們本身來在信中傳遞密匙,馬洛裏就會截獲信息並發現密匙。這就使得馬洛裏能夠在愛麗絲和鮑勃開始加密他們的信息以前或以後,閱讀到他們信息的內容並按照她的意願來篡改信息。
這是一個中間人攻擊
的典型例子,避免這個問題的惟一方法就是收發信的兩方一塊兒修改他們的編碼系統。
因此愛麗絲和鮑勃就想出了一個更好的系統。當鮑勃想要給愛麗絲髮送信息時,他會按照以下的步驟來進行:
鮑勃向愛麗絲送一隻沒有攜帶任何信息的鴿子。
愛麗絲給鮑勃送回鴿子,而且這隻鴿子帶有一個有開着的鎖的盒子,愛麗絲保管着鎖的鑰匙。
鮑勃把信放進盒子中,把鎖鎖上而後把盒子送給愛麗絲。
愛麗絲收到盒子,用鑰匙打開而後閱讀信息。
複製代碼
這樣馬洛裏就不能經過截獲鴿子來篡改信息了,由於她沒有打開盒子的鑰匙。當愛麗絲要給鮑勃發送消息的時候一樣按照上述的流程。
愛麗絲和鮑勃所使用的流程一般被稱爲非對稱密鑰加密
。之因此稱之爲非對稱,是由於即便是你把信息編碼(鎖上盒子)也不能破譯信息(打開鎖住的盒子)。
在術語中,盒子被稱爲公匙
而用來打開盒子的鑰匙被稱爲私匙
。
可是會發現仍是存在問題。當鮑勃收到盒子時他如何能肯定這個盒子來自愛麗絲而不是馬洛裏截獲了鴿子而後換了一個她有鑰匙能打開的盒子呢?
愛麗絲決定簽名標記一下盒子,這樣鮑勃收到盒子的時候就能夠檢查簽名來肯定是愛麗絲送出的盒子了。
那麼鮑勃如何打一開始就能識別出愛麗絲的簽名呢?這是個好問題。愛麗絲和鮑勃也確實有這個問題,因此他們決定讓泰德代替愛麗絲來標記這個盒子。
那麼誰是泰德呢?泰德頗有名的,是一個值得信任的傢伙。他會給任何人簽名而且全部人都信任他只會給合法的人簽名標記盒子。
若是泰德能夠確認索要簽名的人是愛麗絲,他就會在愛麗絲的盒子上簽名。所以馬洛裏就不可能搞到一個有着泰德表明愛麗絲簽了名的盒子,由於鮑勃知道泰德只會給他確認過的人簽名,從而識破馬洛裏的詭計。
泰德的角色在術語中被稱爲認證機構
。而你閱讀此文時所用的瀏覽器打包存有許多認證機構的簽名。
因此當你首次接入一個網站的時候你能夠信任來自這個站點的盒子由於你信任泰德而泰德會告訴你盒子是合法的。
如今愛麗絲和鮑勃有了一個可靠的系統來進行交流,然他們也意識到讓鴿子攜帶盒子比本來只攜帶信件要慢一些。
所以他們決定只有在選擇用對稱加密來給信息編碼(還記得凱撒加密法吧?)的密匙時,使用傳遞盒子的方法(非對稱加密)。
這樣就能夠兩者的優勢兼具了,非對稱加密的可靠性和對稱加密的高效性。
現實世界中咱們不會用信鴿這樣慢的送信手段,但用非對稱加密來編碼信息仍要慢於使用對稱加密技術,因此咱們只有在交換編碼密匙的時候會使用非對稱加密技術。
那麼相信如今的你已經瞭解了HTTPS是如何工做的了~
參考: