談談 HTTPS
這是作為一個前端開發對 HTTPS 的淺顯的理解,僅僅是可以讓你在看完文章之後對 HTTPS 的原理了解,具體的實現方式並沒有給出。有不對的地方歡迎指出。
什麼是 HTTPS
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 現在它被廣泛用於萬維網上安全敏感的通訊,例如交易支付方面。
HTTP 與 HTTPS 的區別
- HTTP 是明文傳輸,HTTPS 通過 SSLTLS 進行了加密
- HTTP 的埠號是 80,HTTPS 是 443
- HTTPS 需要到 CA 申請證書,一般免費證書很少,需要交費
- HTTPS 的連接很簡單,是無狀態的;HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網路協議,比 HTTP 協議安全。
為什麼要使用 HTTPS
前一段時間,公司要求對全棧使用 HTTPS,當時我還在想,HTTPS 不是只用於支付的環節嗎,為什麼要全棧都使用 HTTPS,真的是圖樣圖森破
其實使用 HTTPS 最主要的用處是以下兩點:
- 建立一個信息安全通道,來保證數據傳輸的安全
- 確認網站的真實性,防止釣魚網站
HTTPS 原理
在看 HTTPS 的時候,在 GOOGLE 搜索的大部分都是一些比較專業的術語,對於一個前端來說,對這些什麼應用層、傳輸層的協議和各種伺服器的信息都不是很了解,所以看的不是很明白也看不進去,於是,看到一篇文章:一個故事講完https 表示勉強可以理解,/(ㄒoㄒ)/~~,於是對其詳細的研究了下,對於前端理解 HTTPS 還是可以看一下的。
本文其實就是對這篇文章的理解,不知道其他小夥伴都是什麼水平,我是看 HTTPS 原理比較吃力的
序言
來自中國的張大胖和位於米國的 Bill 進行通信
總是有一種被偷看的感覺
由於張大胖和 Bill 都是使用 HTTP 進行通信,HTTP 是明文的,所以他們的聊天都是可被窺視的。於是,二人準備想要改變現狀,所以 HTTPS 首先要解決的問題就是要保證傳輸的內容只有這兩個人能看懂
plan1:使用對稱密鑰
兩人商量了一下,可以使用對稱密鑰進行加密。(對稱密鑰也就是加密和解密使用的是同一個密鑰)
但是問題又來了~既然網路是不安全的,那麼最開始的時候怎麼將這個對稱密鑰發送出去呢?如果對稱密鑰在發送的時候就已經被攔截,那麼發送的信息還是會被篡改和窺視啊~~
所以這種對稱密鑰的弊端就是,可能被中間人攔截,這樣中間人就可以獲取到了密鑰,就可以對傳輸的信息就行窺視和篡改。
plan2:使用非對稱密鑰
RSA(非對稱加密演算法):雙方必須協商一對密鑰,一個私鑰一個公鑰。用私鑰加密的數據,只有對應的公鑰才能解密,用公鑰加密的數據, 只有對應的私鑰才能解密。
這樣的話 Bill 將自己的公鑰給張大胖,張大胖發送的信息使用 Bill 的公鑰加密,這樣,只有 Bill 使用自己的私鑰才能獲取
但是這樣有個弊端:
- RSA 演算法很慢= =,要慢很多
所以為了解決這個問題,我們使用非對稱密鑰+對稱密鑰結合的方式
plan3:非對稱密鑰+對稱密鑰
使用對稱密鑰的好處是速度比較快,使用非對稱密鑰的好處是可以使得傳輸的內容不能被破解,因為就算你攔截到了數據,但是沒有 Bill 的私鑰,也是不能破解內容的。就比如說你搶了一個保險柜,但是沒有保險柜的鑰匙也不能打開保險柜。
所以我們要結合兩者的優點。使用 RSA 的方法將加密演算法的對稱密鑰發送過去,之後就可以使用使用這個密鑰,利用對稱密鑰來通信了。就比如說我將鑰匙放進了保險柜,然後將保險柜寄給對方。
中間人攻擊
還有一個問題就是在使用非對稱密鑰的時候,首先需要將 Bill 的公鑰給張大胖,那麼在這個過程中,安全是沒有保障的,中間人可以攔截到 Bill 的公鑰,就可以對攔截到的公鑰進行篡改。
這也就是相當於我有手機號,雖然是公開的,誰都可以給我打電話,但是剛開始你並不知道我的手機號,我需要將我的手機號發給你,在我發給你我的手機號的時候,被中間人攔截了,然後將我正確的手機號換成了錯誤的手機號,比如:110,然後,你收到的就是錯誤的手機號:110,但是你自己還不知道你收到的是錯的手機號,這時候,你要是給我打電話,就尷尬了~~
確認身份 —— 數字證書
所以以上的步驟都是可行的,只需要最後一點就可以了,要確定 Bill 給張大胖的公鑰確實是 Bill。 的公鑰,而不是別人的。(剛剛電話號碼的那個例子,也就是說,需要確定我給你發的電話號碼是我的,沒有被修改的)
那怎麼確認 Bill 給張大胖的公鑰確實是 Bill 的呢?
這個時候就需要公證處的存在了。也就是說我需要先將我的電話號碼到公證處去公證一下,然後我將電話號碼傳給你之後,你在將你收到的電話號碼和公證處的比對下,就知道是不是我的了。
對應到計算機世界,那就是數字簽名
數字簽名也就是相當於公證處在公證書上蓋章。
數字簽名和原始信息合在一起稱為數字證書,Bill 只需將數字證書發送給張大胖就可以了。
在拿到數字證書之後,就用同樣的Hash 演算法, 再次生成消息摘要,然後用CA的公鑰對數字簽名解密, 得到CA創建的消息摘要, 兩者一比,就知道有沒有人篡改了!
以上你全部看完並且理解了,那麼對於 HTTPS 你也就大概有個了解了。
推薦閱讀:
※Windows,Mac OSX和Linux平台設置HTTPS以及自簽名證書詳細指南
※JMeter-HTTP請求sampler詳細說明
※認識HTTP----Cookie和Session篇