文章目錄
-
- 1:什麼是https
- 2:使用http協定的問題
-
-
- 2.1:http是明文傳輸。
- 2.2:http不會驗證對方身份。
- 2.3:http無法驗證封包的完整性。
-
- 3:密鑰的問題
- 4:SSL 四次握手
-
-
- 4.1:第一次握手
- 4.2:第二次握手
- 4.3:第三次握手
- 4.4:第四次握手
-
- 5:SSL 的作用
-
-
- 5.1:通過将通信加密解決http明文傳輸問題
- 5.2:驗證通信方的身份
- 5.3:保證封包完整性,防止被篡改
- 5.4:確定服務端公鑰安全到達用戶端。
-
- 6:SSL 速度慢
1:什麼是https
https并不是應用層的一種新協定。
https協定是指:http協定+加密處理+身份認證+完整性保護(http協定+SSL協定/TLS協定)
通常,http協定會直接和TCP通信,而使用https,則變成了http先和SSL通信,再由SSL和TCP通信。一般,将SSL統稱SSL+TLS。
2:使用http協定的問題
- http協定使用明文傳輸資料,内容有可能會被竊聽。
- http協定不會驗證對方身份,可能會遭遇僞裝。
- 無法驗證封包的完整性,可能會遭遇篡改。
2.1:http是明文傳輸。
網絡環境是錯綜複雜的,你的資訊要經過許多層才能到達目的地,比如光纜,各級路由,代理伺服器等,任何一個步驟被劫持都會導緻你的資訊内容暴露。
你總不想把你的隐私内容資料暴露在公衆眼中吧。
2.2:http不會驗證對方身份。
由于http不會驗證對方身份,攻擊者可以僞造你的身份與服務端通信。造成使用者的損失。
除此之外,攻擊者也可以根據此特性,不斷對伺服器發起請求占用伺服器資源,造成 DOS 攻擊。(Denial of Service,拒絕服務攻擊)
2.3:http無法驗證封包的完整性。
由于http無法驗證封包的完整性,可能導緻我們的資料被篡改。(中間人攻擊)
3:密鑰的問題
流行的加密方式:
- 共享密鑰(對稱密鑰:公鑰+公鑰)
- 公開密鑰(非對稱密鑰:私鑰+公鑰)
共享密鑰:服務端将公鑰傳給用戶端,用戶端使用該公鑰加密,服務端使用該公鑰解密。
公開密鑰:将公鑰傳給用戶端,用戶端接收到公鑰,使用該公鑰對資料加密,服務端使用私鑰解密。
公開密鑰的公鑰誰都能擷取,但由公鑰加密的内容,隻有服務端的私鑰可以解密。
遺憾的是無論共享密鑰還是公開密鑰,都存在相應的問題。
共享密鑰 存在怎麼把密鑰安全發送給對方的窘境。因為http協定是明文傳輸的,密鑰由服務端發送給用戶端的時候,存在密鑰暴露的風險,無法判斷進而導緻加密失去意義。
公開密鑰 無法判斷公開的公鑰本身是否是貨真價實公鑰。因為公鑰在傳輸過程中有可能會被篡改。
https使用混合加密方式,因為共享密鑰比公開密鑰效率要快。在保證公鑰能安全到達對方的時候,使用共享密鑰,否則使用公開密鑰。
4:SSL 四次握手
4.1:第一次握手
- 發送用戶端支援的SSL版本及所使用的加密元件(加密算法等資訊)。
4.2:第二次握手
- 發送服務端支援的SSL版本及所使用的加密元件(根據用戶端發送過來的加密元件篩選得出)
- 發送公開密鑰證書。
- 告知用戶端已發送完畢。
4.3:第三次握手
- 通過服務端傳回的公開密鑰計算得出
(包含RSA加密算法,DH密鑰交換算法等) 的随機密碼串。PreMasterSecret
- 提示服務端接下來的通信使用
密鑰加密。PreMasterSecret
- 告知服務端發送完畢,接下來,根據服務端的回複來判斷服務端是否可以正常解密。
4.4:第四次握手
- 告知用戶端是否可以解密
密鑰加密的内容。PreMasterSecret
- 結束握手,SSL連接配接建立完畢。
接下來,通信的内容将會收到SSL的保護。
我們統稱的SSL包含SSL協定與TLS協定。
SSL最初由網景通信公司倡導,開發了SSL3.0之前的版本,之後主導權交給IETF的手中。
後來,IETF在SSL3.0版本的基礎上制定了TLS協定。是以我們通常統一稱之為SSL。
5:SSL 的作用
5.1:通過将通信加密解決http明文傳輸問題
注意:這裡的加密指的是将封包主體(内容)加密,封包首部(通用首部,自定義首部,請求行等)并不會加密。
5.2:驗證通信方的身份
通過驗證對方證書來判斷對方身份。
證書是由值得信賴的第三方機構頒發。
是以要産生一定額外的費用交給頒發證書的第三方機構。
5.3:保證封包完整性,防止被篡改
通過加密及身份驗證。
5.4:確定服務端公鑰安全到達用戶端。
首先,我們需要向第三方CA機構申請一張證書。
證書中包含了我們的名稱,公鑰等資訊。
此外,浏覽器或作業系統會内置一些可靠的第三方機構的公鑰。
CA機構使用自己的私鑰(不公開)對證書資料進行加密,生成簽名:abcdefg
浏覽器使用内置的公鑰解密證書的簽名,如果解密出來的資訊與證書資訊明文相同,則證明證書沒有被篡改。
需要注意的是,CA機構生成的證書簽名,是根據機構自己私鑰生成的,在沒有使用正确的私鑰生成的簽名,就會出現浏覽器公鑰解密簽名解析出來的明文與實際明文不同的問題,然後浏覽器就可以提醒使用者。
可以看出,浏覽器廠商的角色也很重要,前提也需要你信任浏覽器廠商。
6:SSL 速度慢
SSL 雖然能保證通信的安全,但對伺服器的記憶體和流量的消耗都會增大。
對于非敏感的資訊,我們可以依舊使用 http 協定。
涉及個人資訊等隐私以及重要資料的時候可以選擇 https。
SSL 不僅可以用于http協定,其他應用層像 SMTP 和 Telnet 等協定均可配合 SSL協定使用。