Http、Https、Websocket、Socket、Socks的總結

HTTP:

表示超文本傳輸協議。該協議定義瞭如何格式化和傳輸消息,以及Web服務器和瀏覽器應採取什麼操作來響應各種命令。

通信過程:

萬維網服務器端有一個服務器進程,不斷的監聽TCP的80端口,以發現是否有瀏覽器發起的連接請求,一旦監聽到連接建立請求後,建立TCP連接,瀏覽器發起請求,服務器端響應,兩者的交互按照規定的格式和遵循一定的規則

特點

  • 信息是明文傳輸
  • 使用80端口

HTTPS:

HTTP+SSL/TLS 加密通信

作用:

內容加密(建立一個信息安全通道,來保證數據傳輸的安全

身份認證(確認網站的真實性

數據完整性(防止內容被第三方冒充或者篡改

特點 

圖片來自:詳解https是如何確保安全的http://www.wxtlife.com/2016/03/27/%E8%AF%A6%E8%A7%A3https%E6%98%AF%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%9F/

SSL在握手完全階段依賴數字證書(非對稱加密算法)建立安全會話(對應下的123過程)

傳輸階段使用對稱加密算法(密鑰只有一個)對報文加密(對應下述的4過程)

 實際的HTTPS通信過程

爲了防止出現中間人僞造服務器發送的公鑰,採用第三方CA認證保證服務器公鑰的合法性。

(1)傳輸服務器的公鑰(CA認證證書,保證公鑰合法性)給客戶端

(2)客戶端使用服務器端的公鑰加密報文(可能包含相應的密碼信息,下面爲隨機數3),發送給服務器端

(3)客戶端和服務器端從而建立起一套對稱密鑰

(4)後續使用這套對稱密鑰傳輸數據

                          

 

  • 藍色的部分,可以看出來,這是tcp鏈接。所以https的加密層也是在tcp之上的。
  • 客戶端首先發起clientHello消息。包含一個客戶端隨機生成的random1 數字,客戶端支持的加密算法,以及SSL信息
  • 服務器收到客戶端的clientHello消息以後,取出客戶端法發來的random1數字,並且取出客戶端發來的支持的加密算法, 然後選出一個加密算法,並生成一個隨機數random2,發送給客戶端serverhello
  • 讓客戶端對服務器進行身份校驗,服務端通過將自己的公鑰通過數字證書的方式發送給客戶端
  • 客戶端收到服務端傳來的證書後,先從 CA 驗證該證書的合法性,驗證通過後取出證書中的服務端公鑰,再生成一個隨機數 Random3,再用服務端公鑰非對稱加密 Random3 生成 PreMaster Key。並將PreMaster Key發送到服務端,服務端通過私鑰將PreMaster Key解密獲取到Random3,此時客戶端和服務器都持有三個隨機數Random1 Random2 Random3,雙方在通過這三個隨即書生成一個對稱加密的密鑰.雙方根據這三個隨即數經過相同的算法生成一個密鑰,而以後應用層傳輸的數據都使用這套密鑰進行加密.
  • Change Cipher Spec:告訴客戶端以後的通訊都使用這一套密鑰來進行.

參考:https://juejin.im/post/5a2fbe1b51882507ae25f991

區分非對稱加密、對稱加密及數字簽名

非對稱加密:

公鑰加密,加密方和解密方使用不同的密碼

公鑰對外公開,私鑰保密(無私鑰解不開)

數字簽名:

3點:報文鑑別、報文完整性(有私鑰才能加密發送)、不可否認

上述的密文可以被公開的公鑰解析出明文,但是不能篡改

如下爲具有保密性的數字簽名:(以上的非對稱加密和數字簽名的結合)

對稱加密:

加密和解密方使用同一套密碼’

事先約定(需要高度安全的密鑰分配中心增加成本)、或者信使傳遞(大型計算機網絡中明顯不合適)

注意的:

websocket:

創建需要在客戶端和服務之間雙向通信(例如,即時消息和遊戲應用)的web應用

建立在TCP協議之上:基於TCP的一種應用層網絡協議

  • 持久連接
  • 使用8080端口

  一張很好的圖比較兩者的區別:

參考:阮一峯的網絡日誌https://www.ruanyifeng.com/blog/2017/05/websocket.html

websoket服務器框架:Netty, Undertow, Jetty, Spray-websocket, Vert.x, Grizzly 和 Node.js 七種框架

MQTT和websoket區別

MQTT:基於TCP的Pub/Sub協議,爲物聯網優化的特性:適應不同網絡的QoS、層級主題、遺言等

比如利用HTML5應用來作爲MQTT的客戶端,也即是採用MQTT over WebSocket

Socket:

socket是一套完成TCP,UDP協議的接口,對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用接口(API),IP地址和端口號構成套接字

 SOCKS:

主要用於客戶端與外網服務器之間通訊的中間傳遞

SOCKS是會話層的協議,位於表示層傳輸層(TCP/UDP)之間。

有SOCKS代理服務器

參考資料:

【1】使用四種框架分別實現百萬websocket常連接的服務器https://colobu.com/2015/05/22/implement-C1000K-servers-by-spray-netty-undertow-and-node-js/

【2】https://www.zhihu.com/question/21816631

【3】https://www.ruanyifeng.com/blog/2017/05/websocket.html

【4】計算機網絡

【5】https://www.cnblogs.com/yinzhengjie/p/7357860.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章