HTTPS握手過程
HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通信加密。
具體是如何進行加密,解密,驗證的,且看下圖。
1. 客戶端發起HTTPS請求
2. 服務端的配置
採用HTTPS協議的服務器必須要有一套數字證書,可以是自己製作或者CA證書。區別就是自己頒發的證書需要客戶端驗證通過,纔可以繼續訪問,而使用CA證書則不會彈出提示頁面。這套證書其實就是一對公鑰和私鑰。公鑰給別人加密使用,私鑰給自己解密使用。
3. 傳送證書
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等。
4. 客戶端解析證書
這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麼就生成一個隨即值,然後用證書對該隨機值進行加密。
5. 傳送加密信息
這部分傳送的是用證書加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。
6. 服務段解密信息
服務端用私鑰解密後,得到了客戶端傳過來的隨機值,然後把內容通過該值進行對稱加密。
7. 傳輸加密後的信息
這部分信息是服務端用隨機值對稱加密後的信息,可以在客戶端被還原。
8. 客戶端解密信息
客戶端用之前生成的隨機值解密服務端傳過來的信息,於是獲取瞭解密後的內容。
爲什麼HTTPS是安全的?
在HTTPS握手的第四步中,如果站點的證書是不受信任的,會顯示出現下面確認界面,確認了網站的真實性。
HTTPS和HTTP的區別
1. https協議需要到ca申請證書或自制證書。
2. http的信息是明文傳輸,https則是具有安全性的ssl加密。
3. http是直接與TCP進行數據傳輸,而https是經過一層SSL(OSI表示層),用的端口也不一樣,前者是80,後者是443。
4. http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
注意https加密是在傳輸層
https報文在被包裝成tcp報文的時候完成加密的過程,無論是https的header域也好,body域也罷都是會被加密的。
當使用tcpdump或者wireshark之類的tcp層工具抓包,獲取是加密的內容,而如果用應用層抓包,使用Charels(Mac)、Fildder(Windows)抓包工具,那當然看到是明文的。
例子,使用wireshark抓包:
http,可以看到抓到是明文的:
https,可以看到抓到是密文的:
附錄
HTTPS一般使用的加密與HASH算法如下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256