今天我總結了什麼是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依靠證書來驗證伺服器的身份,並為瀏覽器和伺服器之間的通訊加密。具體是如何進行加密,解密,驗證的,且看下圖,下面的稱為一次握手。
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
HTTP與HTTPS握手的那些事
前提 在講述這兩個握手時候,有一些東西需要提前說明。http與tcp ip區別?tpc ip協議是傳輸層協議,主要解決資料如何在網路中傳輸,而http是應用層協議,主要解決如何包裝資料。web使用http協議作應用層協議,以封裝http 文字資訊,然後使用tcp ip做傳輸層協議將它發到網路上。下面...
HTTP與HTTPS握手的那些事
前提 在講述這兩個握手時候,有一些東西需要提前說明。http與tcp ip區別?tpc ip協議是傳輸層協議,主要解決資料如何在網路中傳輸,而http是應用層協議,主要解決如何包裝資料。web使用http協議作應用層協議,以封裝http 文字資訊,然後使用tcp ip做傳輸層協議將它發到網路上。下面...
HTTP與HTTPS握手的那些事
原文 今天我總結了什麼是http三次握手,還有https握手的過程以及為什麼https是安全的。前提 在講述這兩個握手時候,有一些東西需要提前說明。http與tcp ip區別?tpc ip協議是傳輸層協議,主要解決資料如何在網路中傳輸,而http是應用層協議,主要解決如何包裝資料。web使用http...