文章目錄
- 一、HTTP 協議
- 1、HTTP 是什么
- 2、理解 "應用層協議"
- 3、理解 HTTP 協議的工作過程
- 4、HTTP 協議格式
- 5、HTTP 請求 (Request)
- 5.1 認識 URL
- 6、
- 二、HTTPS
- 1、HTTPS是什么
- 2、"加密" 是什么
- 3、HTTPS 的工作過程
- 3.1 對稱加密
- 3.2 非對稱加密
- 3.3 證書
- 3.4 完整過程
- 4、總結
- 三、Tomcat
一、HTTP 協議
1、HTTP 是什么
2、理解 “應用層協議”
3、理解 HTTP 協議的工作過程
4、HTTP 協議格式
5、HTTP 請求 (Request)
5.1 認識 URL
6、
二、HTTPS
1、HTTPS是什么
HTTPS也是一個應用層協議,是在HTTP協議的基礎上引入了一個加密層。
HTTP協議內容是按照文本的方式明文傳輸的,這就導致傳輸過程中出現一些被篡改的情況。
臭名昭著的 “運營商劫持”
下載一個 天天動聽
未被劫持的效果, 點擊下載按鈕, 就會彈出天天動聽的下載鏈接.
已被劫持的效果, 點擊下載按鈕, 就會彈出 QQ 瀏覽器的下載鏈接
例如:在瀏覽器上下載軟件,相信很多同學都經歷過在瀏覽器上面下載東西但是下載的卻不是自己想要下載的,下載下來卻變成了其他的軟件,這就是傳輸內容被篡改了。
由于我們通過網絡傳輸的任何數據包都會經過運營商的網絡設備(路由器,交換機等),那么運營商的網絡設備就可以解析我們的傳輸內容,并進行篡改。
點擊下載天天動聽,就是給服務器發送一個 HTTP 請求,獲取到的HTTP響應包含了改APP的下載地址,運營商劫持后發現這個響應是下載天天動聽,自動將返回給用戶的響應篡改成QQ瀏覽器的下載地址。
不止運營商,黑客也可以用類似的手段來獲取用戶信息,或者篡改內容,如果用戶的賬戶信息甚至支付密碼,所以,在互聯網上,明文傳輸是很危險的事情。
HTTPS 就是在HTTP的基礎上進行了加密操作,來進一步保護用戶的信息安全。
2、“加密” 是什么
加密 就是把明文(傳輸內容)進行一系列的變換,轉換成密文,
解密 就是把密文進行一系列的變換,轉換成明文。
在加密和解密的過程中,需要一個或多個中間數據,輔助進行這個過程,這樣的數據被稱為密鑰(yue)。
加密解密到如今已經發展成一個獨立的學科:密碼學,而密碼學的奠基人,也正是計算機科學的祖師爺之一,艾倫·麥席森·圖靈。
3、HTTPS 的工作過程
既然要保證數據安全,那就要進行 “加密”,
網絡傳輸中不再直接使用明文,而是使用加密之后的 “密文”,
加密的方式有很多,但總得來說分為兩大類:對稱加密 和 非對稱加密。
3.1 對稱加密
對稱加密就是通過同一個 “密鑰”,把明文加密成密文,也能把密文解密成明文。
一個簡單的對稱加密, 按位異或
假設 明文 a = 1234, 密鑰 key = 8888
則加密 a ^ key 得到的密文 b 為 9834.
然后針對密文 9834 再次進行運算 b ^ key, 得到的就是原來的明文 1234.
(對于字符串的對稱加密也是同理, 每一個字符都可以表示成一個數字)
當然, 按位異或只是最簡單的對稱加密. HTTPS 中并不是使用按位異或.
引入對稱加密之后, 即使數據被截獲, 由于黑客不知道密鑰是啥, 因此就無法進行解密, 也就不知道請求的真實內容是啥了。
但是,服務器同一時間給很多客戶端提供服務,每個人的密鑰都是不相同(如果一樣,那么密鑰很容易擴散,黑客也能拿到),因此服務器需要維護每個客戶端和每個密鑰之間的關聯關系,這是一個很龐大的工程。
比較理想的做法是,在客戶端和服務器建立連接的時候,雙方協商好這次的密鑰。
但是如果密鑰也進行明文傳輸的話,那么黑客也能獲取密鑰并對傳輸內容進行解密,所以密鑰的傳輸也需要進行加密。想要對密鑰進行加密,雙方仍舊需要約定一個密鑰,但是這就形成了套娃過程,傳輸內容需要加密,密鑰需要加密,密鑰的密鑰又需要加密…此時密鑰的傳輸用對稱加密就行不通了~
此時需要引入非對稱加密。
3.2 非對稱加密
非對稱加密需要兩個密鑰:“公鑰” 和 “私鑰”
公鑰和私鑰是配對的,最大的缺點是:運算速度非常慢,比對稱加密慢得多
加密方式1:
- 通過公鑰對明文進行加密,變成密文
- 通過私鑰對明文進行解密,變成明文
加密方式2:
- 通過私鑰對明文進行加密,變成密文
- 通過公鑰對明文進行解密,變成明文
公鑰誰都可以持有,不怕泄密,但是私鑰只有服務器可以有,只有持有私鑰的人才可以解密。
- 客戶端生產對稱密鑰,通過公鑰進行加密傳輸,發送給服務器
- 由于中間設備沒有私鑰,即使截獲到加密的對稱密鑰也不知道里面的對稱密鑰是什么
- 服務器通過私鑰對加密的對稱密鑰進行解密,獲取到對稱密鑰,并且使用這個對稱密鑰加密給客戶端返回響應數據。此時知道對稱密鑰的只有客戶端和服務器兩個設備,中間設備不知道對稱密鑰。
- 后續客戶端和服務器的通信就只用對稱密鑰就好了,由于改對稱密鑰只有客戶端和服務器兩個設備知道,其他設備不知道密鑰即使截獲也不知道加密內容是什么。
由于對稱加密的速度比非對稱加密的速度快得多,所以一般只在開始階段協商密鑰的加密使用非對稱加密,后續傳輸都使用對稱加密。
那么接下來問題又來了:
1、客戶端如何獲取到公鑰?
2、客戶端如何確定這個公鑰不是黑客偽造的?
3.3 證書
在客戶端-服務器剛建立連接的時候,服務器就給客戶端返回一個證書
證書里面包含公鑰,也包含了網站的身份信息。
3.4 完整過程
左側為客戶端做的事情,右側是服務器做的事情。
4、總結
HTTPS 工作過程中涉及三組密鑰: