HTTP:
表示超文本傳輸協議。該協議定義瞭如何格式化和傳輸消息,以及Web服務器和瀏覽器應採取什麼操作來響應各種命令。
通信過程:
萬維網服務器端有一個服務器進程,不斷的監聽TCP的80端口,以發現是否有瀏覽器發起的連接請求,一旦監聽到連接建立請求後,建立TCP連接,瀏覽器發起請求,服務器端響應,兩者的交互按照規定的格式和遵循一定的規則
特點
- 信息是明文傳輸
- 使用80端口
HTTPS:
HTTP+SSL/TLS 加密通信
作用:
內容加密(建立一個信息安全通道,來保證數據傳輸的安全)
身份認證(確認網站的真實性)
數據完整性(防止內容被第三方冒充或者篡改)
特點
- CA申請證書(用於服務器端,驗證服務器的安全性比如 阿里雲的CA證書申請https://yundun.console.aliyun.com/?spm=a2c4g.11186623.2.11.26a74d90fl3reU&p=cas&accounttraceid=511feb51442142e2b77b0ed530f40da0xwat#/overview/cn-hangzhou)
- 使用433端口
圖片來自:詳解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:告訴客戶端以後的通訊都使用這一套密鑰來進行.
區分非對稱加密、對稱加密及數字簽名
非對稱加密:
公鑰加密,加密方和解密方使用不同的密碼
‘
公鑰對外公開,私鑰保密(無私鑰解不開)
數字簽名:
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】計算機網絡