了解HTTPS協議之前:【先了解幾個密碼學基礎】
明文: 明文指的是未被加密過的原始數據。
密文:明文被某種加密算法加密之后,會變成密文,從而確保原始數據的安全。密文也可以被解密,得到原始的明文。
密鑰:密鑰是一種參數,它是在明文轉換為密文或將密文轉換為明文的算法中輸入的參數。密鑰分為【對稱密鑰】與【非對稱密鑰】,分別應用在對稱加密和非對稱加密上。
對稱加密:對稱加密又叫做【私鑰加密】,即信息的發送方和接收方使用同一個密鑰去加密和解密數據。對稱加密的特點是算法公開、加密和解密速度快,適合於對大數據量進行加密,常見的對稱加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
其加密過程如下: 明文 + 加密算法 + 私鑰 => 密文
解密過程如下: 密文 + 解密算法 + 私鑰 => 明文
對稱加密中用到的密鑰叫做私鑰,私鑰表示個人私有的密鑰,即該密鑰不能被泄露。
其加密過程中的私鑰與解密過程中用到的私鑰是同一個密鑰,這也是稱加密之所以稱之為“對稱”的原因。
由於對稱加密的算法是公開的,所以一旦私鑰被泄露,那么密文就很容易被破解;
對稱加密的缺點:密鑰安全管理困難。
非對稱加密:非對稱加密也叫做公鑰加密。非對稱加密與對稱加密相比,其安全性更好。對稱加密的通信雙方使用相同的密鑰,如果一方的密鑰遭泄露,那么整個通信就會被破解。
而非對稱加密使用一對密鑰,即公鑰和私鑰,且二者成對出現。私鑰被自己保存,不能對外泄露。公鑰指的是公共的密鑰,任何人都可以獲得該密鑰。
用公鑰或私鑰中的任何一個進行加密,用另一個進行解密。
被公鑰加密過的密文只能被私鑰解密,過程如下: 明文 + 加密算法 + 公鑰 => 密文, 密文 + 解密算法 + 私鑰 => 明文
被私鑰加密過的密文只能被公鑰解密,過程如下: 明文 + 加密算法 + 私鑰 => 密文, 密文 + 解密算法 + 公鑰 => 明文
由於加密和解密使用了兩個不同的密鑰,這就是非對稱加密“非對稱”的原因。
非對稱加密的缺點:加密和解密花費時間長、速度慢,只適合對少量數據進行加密。
在非對稱加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(橢圓曲線加密算法)等。
HTTP概念:超文本傳輸協議,是一個基於請求與響應,無狀態的,應用層的協議,常基於TCP/IP協議傳輸數據,互聯網上應用最為廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標准。
設計HTTP的初衷是為了提供一種發布和接收HTML頁面的方法。
HTTP發展史:
HTTP特點:
1、無狀態:協議對客戶端沒有狀態存儲,對事物處理沒有“記憶”能力,比如訪問一個網站需要反復進行登錄操作
2、無連接:HTTP/1.1之前,由於無狀態特點,每次請求需要通過TCP三次握手四次揮手,和服務器重新建立連接。比如某個客戶機在短時間多次請求同一個資源,服務器並不能區別是否已經響應過用戶的請求,所以每次需要重新響應請求,需要耗費不必要的時間和流量。
3、基於請求和響應:基本的特性,由客戶端發起請求,服務端響應
4、簡單快速、靈活
5、通信使用明文、請求和響應不會對通信方進行確認、無法保護數據的完整性
HTTPS有如下特點:
1、內容加密:采用混合加密技術,中間者無法直接查看明文內容
2、驗證身份:通過證書認證客戶端訪問的是自己的服務器
3、保護數據完整性:防止傳輸的內容被中間人冒充或者篡改
HTTP 與 HTTPS 的區別
1、HTTPS 協議需要到 CA (Certificate Authority,證書頒發機構)申請證書,一般免費證書較少,因而需要一定費用。
2、HTTP 是超文本傳輸協議,信息是明文傳輸,HTTPS 則是具有安全性的 SSL 加密傳輸協議。
3、HTTP 和 HTTPS 使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
4、HTTP 的連接很簡單,是無狀態的。HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 協議安全。(無狀態的意思是其數據包的發送、傳輸和接收都是相互獨立的。無連接的意思是指通信雙方都不長久的維持對方的任何信息。)
HTTPS概念:HTTPS是一種通過計算機網絡進行安全通信的傳輸協議,經由HTTP進行通信,利用SSL/TLS建立全信道,加密數據包。HTTPS使用的主要目的是提供對網站服務器的身份認證,同時保護交換數據的隱私與完整性。
HTTPS協議 = HTTP協議 + SSL/TLS協議;
在HTTPS數據傳輸的過程中,需要用SSL/TLS對數據進行加密和解密,需要用HTTP對加密后的數據進行傳輸,由此可以看出HTTPS是由HTTP和SSL【安全套接層協議】/TLS【安全傳輸層協議】一起合作完成的;
HTTPS的工作原理:
1、客戶端發起HTTPS請求
就是用戶在瀏覽器里輸入一個https網址,然后連接到server的443端口
2、服務端的配置
采用HTTPS協議的服務器必須要有一套數字證書,可以自己制作,也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。
這套證書其實就是一對公鑰和私鑰;
3、傳送證書
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等等。
4、客戶端解析證書
這部分工作是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。
如果證書沒有問題,那么就生成一個隨機值,然后用證書對該隨機值進行加密,就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。
5、傳送加密信息
這部分傳送的是用證書加密后的隨機值,目的就是讓服務端得到這個隨機值,以后客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。
6、服務端解密信息
服務端用私鑰解密后,得到了客戶端傳過來的隨機值(新的私鑰),然后把內容通過該值進行對稱加密,所謂對稱加密就是,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密算法夠彪悍,私鑰夠復雜,數據就夠安全。
7、傳輸加密后的信息
這部分信息是服務段用私鑰加密后的信息,可以在客戶端被還原。
8、客戶端解密信息
客戶端用之前生成的私鑰(隨機值)解密服務段傳過來的信息,於是獲取了解密后的內容,整個過程第三方即使監聽到了數據,也束手無策。
客戶端:客戶端(Client)或稱為用戶端,是指與服務器相對應,為客戶提供本地服務的程序【DNS客戶端、web客戶端(Web客戶端主要指web瀏覽器(Browser)、游戲客戶端、移動客戶端(Android和iOS)】
服務端:服務端是為客戶端服務的,服務的內容諸如向客戶端提供資源,保存客戶端數據。
TCP【TCP 是全雙工的】 和 UDP【OSI模型中,在第四層——傳輸層,處於IP協議的上一層】 區別:
鏈路層:負責封裝和解封裝IP報文,發送和接受ARP/RARP報文等。
網絡層:負責路由以及把分組報文發送給目標網絡或主機。
傳輸層:負責對報文進行分組和重組,並以TCP或UDP協議格式封裝報文。
應用層:負責向用戶提供應用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。
總結:
TCP向上層提供面向連接的可靠服務 ,UDP向上層提供無連接不可靠服務。
雖然 UDP 並沒有 TCP 傳輸來的准確,但是也能在很多實時性要求高的地方有所作為
對數據准確性要求高,速度可以相對較慢的,可以選用TCP;
http協議中常用的請求方法
(1)GET:向特定的資源發起請求
(2)POST:向指定的資源提交數據進行處理請求,數據被包含在請求體中
(3)PUT:向指定資源位置上傳其最新內容
(4)DELETE:請求服務器刪除Request-URL所標識的資源
(5)HEAD:向服務器索與get請求一致的響應,只不過響應體不會被返回
(6)OPTIONS:返回服務器針對特點資源所支持的http請求方法
(7)TRACE:回顯服務器收到的請求,主要用於測試或者診斷
(8)CONNECT:http/1.1協議中預留能夠將連接改為管道方式的代理服務器
GET /url/list 查看
POST /url/create 創建
PUT /url/update 更新
DELETE /url/delete 刪除
HEAD /url/is_exists 檢查資源
PATCH /url/update_by_id 更新某些字段
OPTIONS /url/get_methods 檢查請求方式