標籤:驗證 用戶端 步驟 完成 之間 否則 其他 伺服器 網路連接
HTTP
HTTP是一個屬於應用程式層的物件導向的協議,由於其簡捷、快速的方式,適用於分布式超媒體資訊系統。
HTTP協議的主要特點可概括如下:
1.支援客戶/伺服器模式。
2.簡單快速:客戶向伺服器請求服務時,只需傳送要求方法和路徑。要求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的類型不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。
3.靈活:HTTP允許傳輸任意類型的資料對象。正在傳輸的類型由Content-Type加以標記。
4.無串連:不需連線的含義是限制每次串連只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即中斷連線。採用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於交易處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次串連傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。
http請求由三部分組成,分別是:
請求行、訊息前序、請求本文
HTTP三向交握
第一次握手:用戶端發送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
為了保證這些隱私資料能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的資料進行加密,從而就誕生了HTTPS。
握手過程的簡單描述如下:
1.瀏覽器將自己支援的一套加密規則發送給網站。
2.網站從中選出一組密碼編譯演算法與HASH演算法,並將自己的身份資訊以認證的形式發回給瀏覽器。認證裡麵包含了網站地址,加密公開金鑰,以及認證的頒發機構等資訊。
3.獲得網站認證之後瀏覽器要做以下工作:
a) 驗證認證的合法性(頒發認證的機構是否合法,認證中包含的網站地址是否與正在訪問的地址一致等),如果認證受信任,則瀏覽器欄裡面會顯示一個小鎖頭,否則會給出認證不受信的提示。
b) 如果認證受信任,或者是使用者接受了不受信的認證,瀏覽器會產生一串隨機數的密碼,並用認證中提供的公開金鑰加密。
c) 使用約定好的HASH計算握手訊息,並使用產生的隨機數對訊息進行加密,最後將之前產生的所有資訊發送給網站。
4.網站接收瀏覽器發來的資料之後要做以下的操作:
a) 使用自己的私密金鑰將資訊解密取出密碼,使用密碼解密瀏覽器發來的握手訊息,並驗證HASH是否與瀏覽器發來的一致。
b) 使用密碼加密一段握手訊息,發送給瀏覽器。
5.瀏覽器解密並計算握手訊息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之後所有的通訊資料將由之前瀏覽器產生的隨機密碼並利用對稱式加密演算法進行加密。
這裡瀏覽器與網站互相發送加密的握手訊息並驗證,目的是為了保證雙方都獲得了一致的密碼,並且可以正常的加密解密資料,為後續真正資料的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH演算法如下:
非對稱式加密演算法:RSA,DSA/DSS
對稱式加密演算法:AES,RC4,3DES
HASH演算法:MD5,SHA1,SHA256
其中非對稱式加密演算法用於在握手過程中加密產生的密碼,對稱式加密演算法用於對真正傳輸的資料進行加密,而HASH演算法用於驗證資料的完整性。由於瀏覽器產生的密碼是整個資料加密的關鍵,因此在傳輸的時候使用了非對稱式加密演算法對其加密。非對稱式加密演算法會產生公開金鑰和私密金鑰,公開金鑰只能用於加密資料,因此可以隨意傳輸,而網站的私密金鑰用於對資料進行解密,所以網站都會非常小心的保管自己的私密金鑰,防止泄漏。
TLS握手過程中如果有任何錯誤,都會使加密串連斷開,從而阻止了隱私資訊的傳輸。正是由於HTTPS非常的安全,攻擊者無法從中找到下手的地方,於是更多的是採用了假認證的手法來欺騙用戶端,從而擷取明文的資訊,但是這些手段都可以被識別出來
HTTP+ 加密 + 認證 + 完整性保護 =HTTPS
SOCKET
一、Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,才能使用TCP/IP協議。
二、利用Socket建立網路連接的步驟
建立Socket串連至少需要一對通訊端,其中一個運行於用戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
通訊端之間的串連過程分為三個步驟:伺服器監聽,用戶端請求,串連確認。
1。伺服器監聽:伺服器端通訊端並不定位具體的用戶端通訊端,而是處於等待串連的狀態,即時監控網路狀態,等待用戶端的串連請求。
2。用戶端請求:指用戶端的通訊端提出串連請求,要串連的目標是伺服器端的通訊端。為此,用戶端的通訊端必須首先描述它要已連線的服務器的通訊端,指出伺服器端通訊端的地址和連接埠號碼,然後就向伺服器端通訊端提出串連請求。
3。串連確認:當伺服器端通訊端監聽到或者說接收到用戶端通訊端的串連請求時,就響應用戶端通訊端的請求,建立一個新的線程,把伺服器端通訊端的描述發給用戶端,一旦用戶端確認了此描述,雙方就正式建立串連。而伺服器端通訊端繼續處於監聽狀態,繼續接收其他用戶端通訊端的串連請求。
三、SOCKET串連與TCP串連
建立Socket串連時,可以指定使用的傳輸層協議,Socket可以支援不同的傳輸層協議(TCP或UDP),當使用TCP協議進行串連時,該Socket串連就是一個TCP串連。
四、Socket串連與HTTP串連
由於通常情況下Socket串連就是TCP串連,因此Socket串連一旦建立,通訊雙方即可開始相互發送資料內容,直到雙方串連斷開。但在實際網路應用中,用戶端到伺服器之間的通訊往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆預設會關閉長時間處於非活躍狀態的串連而導致 Socket 串連斷連,因此需要通過輪詢告訴網路,該串連處於活躍狀態。
Http\Https\Socket