今天我總結了什麼是HTTP三次握手,還有HTTPS握手的過程以及爲何HTTPS是安全的。算法
前提瀏覽器
在講述這兩個握手時候,有一些東西須要提早說明。安全
HTTP與TCP/IP區別?服務器
TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。WEB使用HTTP協議做應用層協議,以封裝HTTP 文本信息,而後使用TCP/IP作傳輸層協議將它發到網絡上。網絡
下面的圖表試圖顯示不一樣的TCP/IP和其餘的協議在最初OSI(Open System Interconnect)模型中的位置:tcp
PS:表格來自網上資料工具
CA證書是什麼?網站
CA(Certificate Authority)是負責管理和簽發證書的第三方權威機構,是全部行業和公衆都信任的、承認的。加密
CA證書,就是CA頒發的證書,可用於驗證網站是否可信(針對HTTPS)、驗證某文件是否可信(是否被篡改)等,也能夠用一個證書來證實另外一個證書是真實可信,最頂級的證書稱爲根證書。除了根證書(本身證實本身是可靠),其它證書都要依靠上一級的證書,來證實本身。spa
HTTP三次握手
HTTP(HyperText Transfer Protocol)超文本傳輸協議是互聯網上應用最爲普遍的一種網絡協議。因爲信息是明文傳輸,因此被認爲是不安全的。而關於HTTP的三次握手,其實就是使用三次TCP握手確認創建一個HTTP鏈接。
以下圖所示,SYN(synchronous)是TCP/IP創建鏈接時使用的握手信號、Sequence number(序列號)、Acknowledge number(確認號碼),三個箭頭指向就表明三次握手,完成三次握手,客戶端與服務器開始傳送數據。
PS:圖片來自網上資料
第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
HTTPS握手過程
HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊加密。具體是如何進行加密,解密,驗證的,且看下圖,下面的稱爲一次握手。
PS:圖片如下描述摘自:http://zhuqil.cnblogs.com
1. 客戶端發起HTTPS請求
2. 服務端的配置
採用HTTPS協議的服務器必需要有一套數字證書,能夠是本身製做或者CA證書。區別就是本身頒發的證書須要客戶端驗證經過,才能夠繼續訪問,而使用CA證書則不會彈出提示頁面。這套證書其實就是一對公鑰和私鑰。公鑰給別人加密使用,私鑰給本身解密使用。
3. 傳送證書
這個證書其實就是公鑰,只是包含了不少信息,如證書的頒發機構,過時時間等。
4. 客戶端解析證書
這部分工做是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,好比頒發機構,過時時間等,若是發現異常,則會彈出一個警告框,提示證書存在問題。若是證書沒有問題,那麼就生成一個隨即值,而後用證書對該隨機值進行加密。
5. 傳送加密信息
這部分傳送的是用證書加密後的隨機值,目的就是讓服務端獲得這個隨機值,之後客戶端和服務端的通訊就能夠經過這個隨機值來進行加密解密了。
6. 服務段解密信息
服務端用私鑰解密後,獲得了客戶端傳過來的隨機值(私鑰),而後把內容經過該值進行對稱加密。所謂對稱加密就是,將信息和私鑰經過某種算法混合在一塊兒,這樣除非知道私鑰,否則沒法獲取內容,而正好客戶端和服務端都知道這個私鑰,因此只要加密算法夠彪悍,私鑰夠複雜,數據就夠安全。
7. 傳輸加密後的信息
這部分信息是服務段用私鑰加密後的信息,能夠在客戶端被還原。
8. 客戶端解密信息
客戶端用以前生成的私鑰解密服務段傳過來的信息,因而獲取瞭解密後的內容。
PS: 整個握手過程第三方即便監聽到了數據,也一籌莫展。
總結
爲何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)抓包工具,那固然看到是明文的。
PS:HTTPS自己就是爲了網絡的傳輸安全。
例子,使用wireshark抓包:
http,能夠看到抓到是明文的:
https,能夠看到抓到是密文的:
附錄
HTTPS通常使用的加密與HASH算法以下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256