http和https
https的SSL加密是在傳輸層實現的。
(1)http和https的基本概念
http:超文本傳輸協議,是互聯網上應用最為廣泛的一種網絡協議,是一個客戶端和服務端請求和應答的標准(TCP),用於從www服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網絡傳輸減少。
https:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
https協議的主要作用是:建立一個信息安全通道,來確保數組的傳輸,確保網站的真實性。
(2)http和https的區別?
http傳輸的數據都是未加密的,也就是明文的,網景公司設置了SSL協議來對http協議傳輸的數據進行加密處理,簡單來說https協議是有http和ssl協議構建的可進行加密傳輸和身份認證的網絡協議,比http協議的安全性更高。
主要的區別如下:
Https協議需要ca證書,費用較高。
http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
使用不同的鏈接方式,端口也不同,一般而言,http協議的端口為80,https的端口為433
http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
(3)https協議的工作原理
客戶端在使用HTTPS方式與Web服務器通信時有以下幾個步驟,如圖所示。
客戶使用https url訪問服務器,則要求web服務器建立ssl鏈接。
web服務器接收到客戶端的請求之后,會將網站的證書(證書中包含了公鑰),返回或者說傳輸給客戶端。
客戶端和web服務器端開始協商SSL鏈接的安全等級,也就是加密等級。
客戶端瀏覽器通過雙方協商一致的安全等級,建立會話密匙,然后通過網站的公鑰來加密會話秘鑰,並傳送給網站。
web服務器通過自己的私鑰解密出會話秘鑰。
web服務器通過會話秘鑰加密與客戶端之間的通信。
(4)https協議的優點
使用HTTPS協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全,可防止數據在傳輸過程中不被竊取、改變,確保數據的完整性。
HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅度增加了中間人攻擊的成本。
谷歌曾在2014年8月份調整搜素引擎算法,並稱“比起同等HTTP網站,采用HTTPS加密的網站在搜素結果中的排名將會更高。”
(5)https協議的確定
https握手階段比較費時,會使頁面加載時間延長50%。增加10%~20%的耗電。
https緩存不如http高效,會增加數據開銷。
SSL證書也需要錢,功能越強大的證書費用越高。
SSL證書需要綁定IP,不能在同一個ip上綁定多個域名,ipv4資源支持不了這種消耗。
tcp三次握手,一句話概括
SYN:同步序列編號(Synochronize Sequence Numbers)
從圖片可以得到三次握手可以簡化為:C發起了請求連接S確認,也發起連接c確認我們再看看每次握手的作用:
- 第一次握手:S只可以確認自己可以接受C發送的報文段
- 第二次握手:C可以確認S收到了自己發送的報文段,並且可以確認自己可以接受S發送的報文段
- 第三次握手:S可以確認C收到了自己發送的報文段
提示:握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。
TCP四次揮手
1.客戶端進程發出連接釋放報文,並且停止發送數據。釋放數據報文首部,FIN=1,其序列號為seq=u (等於前面已經傳送過來的數據的最后一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
2.服務器收到鏈接釋放報文,發出確認報文,ACK=1,ack = u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然接受。這個狀態要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
3.客戶端收到服務器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。
4.服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認。
5.客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq = u +1,此時,客戶端就進入了TIME-WAIT(事件等待)狀態。注意此時TCP鏈接還沒有釋放,必須經過2**MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態。
6.服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB后,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。