今天我總結了什麼是HTTP三次握手,還有HTTPS握手的過程以及為什麼HTTPS是安全的。
前提
在講述這兩個握手時候,有一些東西需要事先說明。
HTTP與TCP/IP區別?
TPC/IP協定是傳輸層協議,主要解決資料如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝資料。 WEB使用HTTP協定作應用層協定,以封裝HTTP 文字訊息,然後使用TCP/IP做傳輸層協定將它傳送到網路上。
下面的圖表試圖顯示不同的TCP/IP和其他的協定在最初OSI(Open System Interconnect)模型中的位置:
##PS:表格來自網路資料CA憑證是什麼?
CA(Certificate Authority)是負責管理和簽發憑證的第三方權威機構,是所有行業和公眾都信任的、認可的。 CA證書,就是CA頒發的證書,可用來驗證網站是否可信(針對HTTPS)、驗證某文件是否可信(是否被竄改)等,也可以用一個證書來證明另一個證書是真實可信,最頂級的證書稱為根證書。除了根證書(自己證明自己是可靠),其它證書都要依靠上一級的證書,來證明自己。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.com1. 用戶端發起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
以上是什麼是HTTP與HTTPS握手的詳細內容。更多資訊請關注PHP中文網其他相關文章!