之前遇到一個問題是:HTTP和socket通信的區別是什麼?
答:HTTP:無狀態。所以有時候會自動斷開連接;socket會一直保持連接狀態,除非關閉socket,纔會斷開連接,更穩定。
HTTP缺點:
1.通信明文,容易被竊聽。
HTTP -> 明文方式傳送。
TCP/IP協議的通信機制:內容在所有通信線路上可能被窺視。
------------------------------------------------------------------------------
(1)通信的加密:HTTP + SSL (Secure Socket Layer)安全套接層
或
HTTP + TLS (Transport layer Security) 安全層傳輸協議
(2)內容的加密:
客戶端對請求報文加密處理後傳輸,前提客戶端和服務端都具有加密和解密機制(主要在web服務中)
2.不驗證同新方的身份,可能遭遇僞裝
HTTP協議中請求和響應,不會對通信地址進行通信;“服務器是否是發送請求中URI真正指定的主機,返回的響應是否真的返回到實際提出請求的客戶端”
若發送端ip和端口號沒有被web服務器設定限制訪問的前提下 -> 服務器只要接收到請求,不管是誰都會返回一個響應
3.無法證明抱穩的完整性,有可能被篡改
HTTP防止被篡改:添加校驗方法(MD5、SHA-1等)
--- 某些web服務器和特定web瀏覽器存在安全漏洞
HTTP : 應用層(HTTP) -> TCP -> IP
HTTPS : 應用層(HTTP) -> SSL -> TCP -> IP
HTTPS通信簡單流程(若有不妥地方,請指出。謝謝):
1.客戶端請求服務端,帶上SSL指定版本,加密組件和列表等;
2.服務端讀取正確的SSL指定版本,加密組件和報文內容;
3.服務端響應給客戶端返回報文內容(包含公開密鑰證書)
----------------------------第一次握手完成----------------------------------
4.客戶端請求服務端帶上報文內容(加密後的密鑰 -> 上一步的公開密鑰證書)
5.服務端用私鑰解密密鑰,成功響應給客戶端返回帶上相對應的加密內容(用公開密鑰證書加密內容)
6.服務端和客戶端報文交換成功,收到SSL保護
7.應用層協議進行通信 -> HTTP請求
8.客戶端斷開連接,發送close_notify報文,發送TCP FIN關閉與TCP的通信
使用SSL時,處理速度會變慢:
1.通信慢:消耗大量CPU及內存資源,通信量增加(網絡敷在可能變慢2-100倍)
2.加密處理:在服務端和客戶端進行加密和解密,消耗硬件資源,負載增加(使用SSL加速器,盡在SSL通信處理時發揮作用,以分擔負載)